1

我正在尝试使用 node-memwatch 来跟踪我的应用程序中的内存泄漏。目前我在应用程序启动时创建一个 HeapDiff,然后在 mem-watch 检测到泄漏时进行差异。我发现了一些看起来可疑的项目,但我不明白我应该如何将报告的内容映射到我的代码中。例如,在 diff 中报告了以下项目:

 { what: 'String',
   size_bytes: 4785072,
   size: '4.56 mb',
   '+': 32780,
   '-': 563 },

这似乎是内存泄漏的主要嫌疑人。我怎样才能找出我的哪一段代码导致了这个泄漏?在他们在其网站上提供的示例中,what通常是显而易见的MyLeakyClass,而不是系统类型......

4

2 回答 2

1

似乎该功能尚未实现:

“特别是,我们希望 node-memwatch 能够提供一些泄漏对象的示例(例如,变量名称、数组索引或闭包代码)。”

https://hacks.mozilla.org/2012/11/tracking-down-memory-leaks-in-node-js-a-node-js-holiday-season/

LeakingClass 示例应该从此代码中给出:https ://github.com/lloyd/node-memwatch/blob/master/examples/basic_heapdiff.js

于 2013-12-12T14:56:12.507 回答
1

这意味着自启动 HeapDiff 以来,您已经创建了 32780 个字符串,并收集了 563 个垃圾。(您收集的那些可能是也可能不是在此窗口中创建的;它们可能在差异开始时已经存在)。字符串使用的内存总量增加了 4.56mb。这可能都在一个字符串中,或​​者它可以完全均匀地分布在 32k 字符串中。你没有这方面的数据。

当然,字符串会出现在您的代码中。所以我的建议是,不要看那些。寻找具有更多可跟踪(greppable、稀有等)名称且正在增长的对象,即使它们的增长似乎比您的字符串少,并跟踪这些对象。在这个过程中,你可能会发现你的大漏洞。

于 2015-02-01T06:57:37.543 回答