node.js - 在生产中查找 nodejs 中的内存泄漏

标签 node.js memory-leaks production-environment

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

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

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

你知道这样的工具吗?

谢谢。

最佳答案

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

快速方式(编辑代码):

  1. 在代码的开头添加 require('heapdump');
  2. 通过从终端执行 kill -USR2 {{pid}} 或使用 process.kill(process.pid, 'SIGUSR2');
  3. 您将获得多个 heapdump-XXX.YYY.heapsnapshot 文件,您可以将其与 Chrome 开发工具进行比较。

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

  1. 通过执行 kill -USR1 {{pid}} 向 node.js 进程发送 USR1 信号。请注意,这将启用 Debug模式,导致进程明显“卡住”。
  2. 运行 node-inspector(通过执行 npm install -g node-inspector 全局安装后可能)
  3. 在 Google Chrome 中打开 http://0.0.0.0:8080/debug?port=5858(node-inspector 使用端口 8080,调试器使用端口 5858),这将使进程“解冻”
  4. 现在,您可以根据需要获取任意数量的头转储,只需单击“获取堆快照”按钮即可。
  5. 您将拥有多个 Snapshot X 文件,您可以将其与 Chrome 开发工具进行比较。

关于node.js - 在生产中查找 nodejs 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627053/

相关文章:

node.js - 如何在 Node.js 中使用 MathJax 将 LaTeX 更改为 MathML?

node.js - 如何通过 AWS SDK Javascript 使用 Async 和 Await

AngularJS $http 请求在 Node JS Express 中未检测为 xhr

version-control - 生产网站环境的版本控制

php - 从 Node 服务器上传文件时 move_uploaded_file 始终返回 false

c# - asp.net mvc 应用程序中的文件读写内存泄漏

c - 存在内存泄漏的链表

iOS - 内存警告后应用程序崩溃 - 仪器显示没有泄漏

php - Symfony 4 未登录生产模式

angular6 http 请求返回 isTrusted