node.js memwatch追踪内存泄漏
我一直在追踪一个节点程序中非常严重的内存泄漏 我正在使用memwatch模块HeapDiff()尝试识别有问题的对象 HeapDiff的报告显示了details数组中的两个可疑元素(“array”和“String”,每一个都有相当大的增长 我正式失踪了,不知道如何缩小可能的罪犯范围。 有几十个google-able Howto,但对我来说没有一个是有意义的。这个程序使用了相当多的第三方模块,包括carrier、dequeue和mqtt。它有318行代码,所以我没有发布 如果有人给我指点下一步该怎么做,我将不胜感激 以下是memwatch HeapDiff转储的摘录:node.js memwatch追踪内存泄漏,node.js,memory-leaks,node-memwatch,Node.js,Memory Leaks,Node Memwatch,我一直在追踪一个节点程序中非常严重的内存泄漏 我正在使用memwatch模块HeapDiff()尝试识别有问题的对象 HeapDiff的报告显示了details数组中的两个可疑元素(“array”和“String”,每一个都有相当大的增长 我正式失踪了,不知道如何缩小可能的罪犯范围。 有几十个google-able Howto,但对我来说没有一个是有意义的。这个程序使用了相当多的第三方模块,包括carrier、dequeue和mqtt。它有318行代码,所以我没有发布 如果有人给我指点下一步该怎
{
"before": {
"nodes": 25312,
"time": "2014-09-01T10:59:24.000Z",
"size_bytes": 3596320,
"size": "3.43 mb"
},
"after": {
"nodes": 125705,
"time": "2014-09-01T11:14:24.000Z",
"size_bytes": 20255728,
"size": "19.32 mb"
},
"change": {
"size_bytes": 16659408,
"size": "15.89 mb",
"freed_nodes": 674,
"allocated_nodes": 101067,
"details": [
{
"what": "Array",
"size_bytes": 348440,
"size": "340.27 kb",
"+": 1592,
"-": 295
},
{
"what": "String",
"size_bytes": 12580056,
"size": "12 mb",
"+": 50329,
"-": 20
}
]
没有代码示例,很难深入了解细节,但在较高的层次上 我所做的不仅仅是查看最大的类别(因为我的类别也是数组和字符串[1]),而是查找我可以追踪到的对象类型;查找所有显著增长的行以及外观独特的“What”条目,然后找到它们在代码中的位置。围绕这些条目的使用进行新的区分,缩小或扩展,直到找到增长点 如果找不到可疑的对象名称,只需将主执行路径分为两到三部分,并对每个部分运行HeapDiff即可。(您当前使用什么触发HeapDiff?启动和.on('leak')?)
我可以建议您尝试一下IDDE工具,看看这是否有助于您追踪漏洞吗?请查看此[链接]:()提供一些信息。如果您需要更多信息来开始,我非常乐意提供帮助。12mb的字符串似乎很奇怪。我会寻找任何函数,其中您向处于闭包状态的字符串添加字符。如果没有代码,我将无法再提供帮助。