内存

在本文件中,您可以了解如何调试与内存相关的問題。

我的进程内存不足

Node.js (JavaScript) 是一种垃圾回收语言,因此可能会通过保留器出现内存泄漏。由于 Node.js 应用程序通常是多租户的、业务关键的和长时间运行的,因此提供一种可访问且有效的方式来查找内存泄漏至关重要。

症状

用户观察到内存使用量持续增加 (可能是快速或缓慢,几天甚至几周),然后看到进程管理器使进程崩溃并重启。进程可能比以前运行得更慢,重启会导致一些请求失败 (负载均衡器响应 502)

副作用

  • 由于内存耗尽,进程重启,请求被丢弃
  • GC 活动增加导致 CPU 使用率更高,响应时间更慢
    • GC 阻塞事件循环导致速度变慢
  • 内存交换增加会减慢进程速度 (GC 活动)
  • 可能没有足够的可用内存来获取堆快照

我的进程对内存的使用效率低下

症状

应用程序使用意外数量的内存,或者我们观察到垃圾回收器活动增加。

副作用

  • 页面错误数量增加
  • GC 活动和 CPU 使用率更高

调试

大多数内存问题可以通过确定我们特定类型的对象占用多少空间以及哪些变量阻止它们被垃圾回收来解决。了解程序随时间的分配模式也有助于解决问题。