在生产环境中查找nodejs中的内存泄漏
我在生产中有一个nodejs应用程序,我有一个内存泄漏(内存在3天内从600Mo增加到3Go)。
我search了一些工具来进行内存转储,但是我只发现需要在应用程序中写入转储的插件。
当然,我不能停止我的应用程序,并重新启动它(修改后)以拍摄快照,我想采取一个外部工具的节点外存储转储。
你知道这样的工具吗?
谢谢。
您可以通过两种方式创build一个(或更好几个)堆转储,修改代码或不修改代码。
快速的方式(编辑代码):
- 添加
require('heapdump');
在你的代码的开始。 - 发送USR2信号到node.js进程,通过从terminal执行
kill -USR2 {{pid}}
,或者从process.kill(process.pid, 'SIGUSR2');
执行代码process.kill(process.pid, 'SIGUSR2');
- 您将获得几个
heapdump-XXX.YYY.heapsnapshot
文件,您可以与Chrome开发工具进行比较。
缓慢的方式(不编辑代码,既不重新启动):
- 发送一个USR1信号到node.js进程,通过
kill -USR1 {{pid}}
。 请注意,这将启用debugging模式,导致过程中出现明显的“冻结”。 - 运行
node-inspector
(通过执行npm install -g node-inspector
来全局安装它) - 在Google Chrome中打开
http://0.0.0.0:8080/debug?port=5858
(节点检查器使用端口8080,debugging器使用端口5858),这将导致进程“解冻” - 现在,您可以根据需要进行如此多的转储,只需单击“Take heap snapshot”button即可。
- 您将拥有多个
Snapshot X
文件,您可以与Chrome开发工具进行比较。