Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js memwatch追踪内存泄漏_Node.js_Memory Leaks_Node Memwatch - Fatal编程技术网

node.js memwatch追踪内存泄漏

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行代码,所以我没有发布 如果有人给我指点下一步该怎

我一直在追踪一个节点程序中非常严重的内存泄漏

我正在使用memwatch模块HeapDiff()尝试识别有问题的对象

HeapDiff的报告显示了details数组中的两个可疑元素(“array”和“String”,每一个都有相当大的增长

我正式失踪了,不知道如何缩小可能的罪犯范围。 有几十个google-able Howto,但对我来说没有一个是有意义的。这个程序使用了相当多的第三方模块,包括carrier、dequeue和mqtt。它有318行代码,所以我没有发布

如果有人给我指点下一步该怎么做,我将不胜感激

以下是memwatch HeapDiff转储的摘录:

   {
    "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')?)

  • 顺便说一句,这并不是说有一个12mb的字符串。这是说有12mb的字符串价值——实际上,比diff前端的字符串多12mb。这些12mb的字符串分布在50329个新字符串上。因此,它们仍然相当大

  • 我可以建议您尝试一下IDDE工具,看看这是否有助于您追踪漏洞吗?请查看此[链接]:()提供一些信息。如果您需要更多信息来开始,我非常乐意提供帮助。

    12mb的字符串似乎很奇怪。我会寻找任何函数,其中您向处于闭包状态的字符串添加字符。如果没有代码,我将无法再提供帮助。