【问题标题】:node.js memwatch chasing a memory leaknode.js memwatch 追踪内存泄漏
【发布时间】:2014-09-01 11:40:50
【问题描述】:

我一直在追查节点程序中一个非常糟糕的内存泄漏。

我正在使用 memwatch 模块 HeapDiff() 来尝试识别违规对象。

HeapDiff 的报告显示 details 数组中有两个可疑元素(“Array”和“String”,每个元素都有很大的增长。

我正式迷路了,不知道如何缩小可能的罪魁祸首。 有几十个 google-able howtos,但对我来说没有任何意义。有问题的程序使用了很多 3rd 方模块,包括载体、出队和 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
            }
        ] 

【问题讨论】:

  • 12mb 的字符串看起来很奇怪。我会寻找任何将字符添加到关闭的字符串的函数。如果没有代码,我将无法再提供帮助。

标签: node.js memory-leaks node-memwatch


【解决方案1】:

没有代码示例,很难深入,但在高层次上……

我所做的不仅仅是查看最大的类别(因为我的也是 Array 和 String[1]),而是寻找我可以追踪的对象类型;找到有任何显着增长的行和独特的“什么”条目,然后找到它们在你的代码中的位置。围绕您对这些的使用进行新的差异,并缩小或分散,直到找到您的增长点。

如果您找不到看起来很可疑的对象名称,只需将您的主执行路径分成两到三部分,然后为每一部分运行 HeapDiffs。 (您目前使用什么来触发 HeapDiff?启动和 .on('leak')?)

  1. 顺便说一句,这并不是说有一个 12mb 的字符串。这就是说有 12mb 的字符串——实际上,12mb 更多的字符串比 diff 的前端。那些 12mb 分布在 50329 个新字符串上。所以,它们仍然相当大。

【讨论】:

    【解决方案2】:

    我可以建议您尝试一下 IDDE 工具,看看这是否可以帮助您追踪泄漏?请参阅此 [链接]:(What diagnostic tools are available for Node.js applications?) 了解一些信息。如果您需要更多信息才能开始使用,我非常乐意为您提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2011-02-15
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      相关资源
      最近更新 更多