内存诊断相关
在本文档中,你讲学到如何调试与内存相关的一系列问题。
内存耗尽
Node.js (基于 JavaScript) 是一个带垃圾回收功能的语言,故内存泄露是可能是 大量占用引起。通常 Node.js 的应用程序都是多终端、关键业务,以及长时间运行。因 此如能提供一个行之有效的找出内存泄露原因的方法是必须的。
相关症状
用户观察到内存占用持续增长 (或快活慢,持续数天乃至数周不等),然后发现进程崩溃并 通过进程管理器重启进程。进程或许比之前运行得慢,重启也使得一些特定的请求失败 (负载均衡返回 502)。
副作用
- 因为内存耗尽,故重启进程;相关请求也被丢弃。
- 增长的 GC 活动导致 CPU 使用率越来越高,响应速度越来越慢。
- GC 把事件循环机制阻塞住导致了速度变慢。
- 增长的内存交换(由 GC 活动引起)使得进程变慢。
- 没有足够的内存空间来存储一个堆快照。
低效率内存使用
相关症状
应用程序占用的内存与我们的预期不符,我们观察到垃圾回收器的活动有所提升。
副作用
- 分页错误数持续增长。
- 较高的 GC 活动以及 CPU 使用率。
调试
调试一个内存泄露的问题,我们需要看特定的对象占用了多少内存空间,以及什么变量占有了 他们从而使得垃圾回收。为了使我们有效地调试,我们同时也需要了解变量随时间的分配模式。