检测nodejs中的内存泄漏

Eri*_*rik 34 node.js

是否有一些工具可以检测nodejs中的内存泄漏?并告诉我您在测试nodejs应用程序方面的经验.

BFi*_*Fil 22

以下工具对于发现内存泄漏非常有用:

节点检查

还有一个教程可以帮助您找到内存泄漏:

https://github.com/felixge/node-memory-leak-tutorial


小智 10

在追踪内存泄漏时,我尝试了上面的节点检查器.
截至2012年4月,它没有更新到使用当代节点版本v0.6.12.因此我发现:https://github.com/c4milo/node-webkit-agent.
它能够显示节点检查器不支持的较新V8引擎的堆快照.在短时间内,我能够检测泄漏模块(在可能的情况下loggly),我希望你有类似的成功!

  • 这非常有效.我也将它用于节点v0.8.x. (2认同)

And*_*nak 6

我还可以推荐以下来源:

  1. 以下是NodeUp的剧集,其中讨论了分析和内存泄漏检测工具:

  2. 本文 - 跟踪Node.js中的内存泄漏 - 一个Node.JS假日季节,它基本上聚合了所有广为人知的模块和技术来追踪内存泄漏

  3. 对于Mac OS - Instruments工具可能有助于调试本机(C++)模块.它不像SmartOS工具那么复杂,但很容易设置.


Piq*_*qué 5

方法 1 -
\nNode 允许我们手动触发垃圾收集,这是我们在尝试确认内存泄漏时应该做的第一件事。这可以通过使用 --expose-gc 标志运行 Node(即 node --expose-gc index.js)来完成。一旦节点在该模式下运行,您就可以通过从程序中调用 global.gc() 以编程方式随时触发垃圾收集。

\n\n

您还可以通过调用 process.memoryUsage().heapUsed 检查进程使用的内存量。

\n\n

通过手动触发垃圾收集并检查所使用的堆,您可以确定您是否确实观察到程序中的内存泄漏。当您进行此测试时,内存增长会变得更加明显。

\n\n

方法2-

\n\n

3 堆转储方法

\n\n

Node\xe2\x80\x99s --inspect 标志出现在节点版本 6 中。此功能允许您从 Chrome\xe2\x80\x99s DevTools 中调试和检查节点进程。

\n\n

只需传递 --inspect 标志即可启动应用程序:

\n\n

$ node --inspect index.js

\n\n

按照 URL 访问检查器并导航至内存选项卡。

\n\n

DevTools 内存选项卡

\n\n

在此输入图像描述\n这里\xe2\x80\x99s我们将做什么:

\n\n

使用 autocannon -c 1 -d 60 http://localhost:PORT
\n[ https://www.npmjs.com/package/autocannon ]
\n在大约 10 秒后拍摄堆快照,并在 30 秒后再次拍摄应用程序。

\n\n

堆快照比较
\n比较视图向我们展示了快照之间发生的情况。您可以看到大量对象已被创建或未被 GC 收集。

\n\n

请阅读这些精彩的文章以了解更多信息。
\n他们为查找和修复泄漏提供了很大帮助:-

\n\n

https://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/

\n\n

https://www.nearform.com/blog/self-detect-memory-leak-node/

\n\n

https://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/

\n