我正在尝试使用node-memwatch来跟踪应用程序中的内存泄漏。目前,我正在应用程序启动时创建一个HeapDiff,然后在mem-watch检测到泄漏时执行一个diff。我发现了一些看起来可疑的项目,但我不知道应该如何将报告内容映射到我的代码中。例如,在diff中报告以下项目:
{ what: 'String',
size_bytes: 4785072,
size: '4.56 mb',
'+': 32780,
'-': 563 },似乎是内存泄露的首要嫌犯。我怎样才能找出是我的哪段代码导致了泄漏?在他们网站上给出的例子中,what通常与MyLeakyClass类似,而不是一种系统类型……
发布于 2013-12-12 22:56:13
这个特性似乎还没有实现:
特别是,我们希望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
发布于 2015-02-01 14:57:38
这意味着,自启动HeapDiff以来,您已经创建了32780个字符串,并进行了垃圾回收。(您收集的文件可能是也可能不是在此窗口中创建的文件;当diff启动时,它们可能已经存在)。字符串使用的内存总量增加了4.56mb。所有这些都可以放在一个字符串中,也可以完美地均匀分布在32k个字符串中。你没有这方面的数据。
当然,字符串会出现在您的代码中。所以我的建议是,不要看那些。寻找具有更多可跟踪(greppable,稀有等)名称的对象,这些对象的名称正在增长,即使它们看起来比您的字符串增长得慢,也要跟踪这些对象。在这个过程中,你可能会发现你的大漏洞。
https://stackoverflow.com/questions/17196277
复制相似问题