我正在尝试使用node-memwatch来跟踪应用程序中的内存泄漏。目前我正在创建应用程序启动时的HeapDiff,然后在mem-watch检测到泄漏时执行差异。我发现一些看起来很可疑的项目,但我不明白我应该如何将报告的内容映射到我的代码。例如,diff:
中报告了以下项目 { what: 'String',
size_bytes: 4785072,
size: '4.56 mb',
'+': 32780,
'-': 563 },
这似乎是内存泄漏的主要嫌疑人。我怎样才能弄清楚哪部分代码导致了这个漏洞?在他们在网站上提供的示例中,what
通常显示为MyLeakyClass
而非系统类型......
答案 0 :(得分: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
答案 1 :(得分:1)
这意味着你创建了32780个字符串,并且自启动HeapDiff以来垃圾收集了563个。 (你收集的那些可能是也可能不是在这个窗口中创建的;当diff开始时它们可能已经存在)。字符串使用的内存总量增加了4.56mb。这可能都在一个字符串中,或者它可以完全均匀地分布在32k字符串中。你没有相关数据。
当然,字符串会出现在你的代码中。所以我的建议是,不要看那些。寻找具有更多可跟踪(可以更轻,更稀有,无论什么)的名称的对象,即使它们看起来比字符串增长更少,也可以跟踪它们。在这个过程中,您可能会发现您的大漏洞。