我在生产中有一个 nodejs 应用程序,我有内存泄漏(内存在 3 天内从 600Mo 增加到 3Go)。
我搜索了一些工具来进行内存转储,但我只找到了需要在应用程序中写入转储的插件。
当然,我不能停止我的应用程序并重新启动它(修改后)来拍摄快照,我想使用外部工具在 Node 外进行内存转储。
你知道这样的工具吗?
谢谢。
最佳答案
您可以通过两种方式创建一个(或更好的多个)heapdump,修改代码或不修改代码。
快速方式(编辑代码):
- 在代码的开头添加
require('heapdump');
。 - 通过从终端执行
kill -USR2 {{pid}}
或使用process.kill(process.pid, 'SIGUSR2');
- 您将获得多个
heapdump-XXX.YYY.heapsnapshot
文件,您可以将其与 Chrome 开发工具进行比较。
慢速方式(不编辑代码也不重启):
- 通过执行
kill -USR1 {{pid}}
向 node.js 进程发送 USR1 信号。请注意,这将启用 Debug模式,导致进程明显“卡住”。 - 运行
node-inspector
(通过执行npm install -g node-inspector
全局安装后可能) - 在 Google Chrome 中打开
http://0.0.0.0:8080/debug?port=5858
(node-inspector 使用端口 8080,调试器使用端口 5858),这将使进程“解冻” - 现在,您可以根据需要获取任意数量的头转储,只需单击“获取堆快照”按钮即可。
- 您将拥有多个
Snapshot X
文件,您可以将其与 Chrome 开发工具进行比较。
关于node.js - 在生产中查找 nodejs 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627053/