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

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

我search了一些工具来进行内存转储,但是我只发现需要在应用程序中写入转储的插件。

当然,我不能停止我的应用程序,并重新启动它(修改后)以拍摄快照,我想采取一个外部工具的节点外存储转储。

你知道这样的工具吗?

谢谢。

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

快速的方式(编辑代码):

  1. 添加require('heapdump'); 在你的代码的开始。
  2. 发送USR2信号到node.js进程,通过从terminal执行kill -USR2 {{pid}} ,或者从process.kill(process.pid, 'SIGUSR2');执行代码process.kill(process.pid, 'SIGUSR2');
  3. 您将获得几个heapdump-XXX.YYY.heapsnapshot文件,您可以与Chrome开发工具进行比较。

缓慢的方式(不编辑代码,既不重新启动):

  1. 发送一个USR1信号到node.js进程,通过kill -USR1 {{pid}} 。 请注意,这将启用debugging模式,导致过程中出现明显的“冻结”。
  2. 运行node-inspector (通过执行npm install -g node-inspector来全局安装它)
  3. 在Google Chrome中打开http://0.0.0.0:8080/debug?port=5858 (节点检查器使用端口8080,debugging器使用端口5858),这将导致进程“解冻”
  4. 现在,您可以根据需要进行如此多的转储,只需单击“Take heap snapshot”button即可。
  5. 您将拥有多个Snapshot X文件,您可以与Chrome开发工具进行比较。