在生产中查找 nodejs 中的内存泄漏

Kiv*_*iva 5 memory-leaks production-environment node.js

我在生产中有一个 nodejs 应用程序,我有内存泄漏(内存在 3 天内从 600Mo 增加到 3Go)。

我搜索了一些工具来进行内存转储,但我只找到了需要在应用程序中写入转储的插件。

当然,我不能停止我的应用程序并重新启动它(修改后)以获取快照,我想使用外部工具在节点外进行内存转储。

你知道这样的工具吗?

谢谢。

gre*_*uze 7

您可以通过两种方式创建一个(或更好的几个)堆转储,修改代码或不修改代码。

快捷方式(编辑代码):

  1. require('heapdump');在代码的开头添加。
  2. 向 node.js 进程发送 USR2 信号,方法是kill -USR2 {{pid}}从终端执行,或从代码执行process.kill(process.pid, 'SIGUSR2');
  3. 您将获得几个heapdump-XXX.YYY.heapsnapshot文件,您可以将这些文件与 Chrome Dev Tools 进行比较。

缓慢的方式(不编辑代码也不重启):

  1. 通过执行kill -USR1 {{pid}}. 请注意,这将启用调试模式,导致过程中出现明显的“冻结”。
  2. 运行node-inspector(通过执行全局安装后可能npm install -g node-inspector
  3. http://0.0.0.0:8080/debug?port=5858在谷歌浏览器中打开(节点检查器使用8080端口,调试器使用5858端口),这将导致进程“解冻”
  4. 现在,您可以根据需要进行多次头部转储,只需单击“拍摄堆快照”按钮即可。
  5. 您将有几个Snapshot X文件,可以与 Chrome Dev Tools 进行比较。