7

根据我的服务器监控,我的内存使用量随着时间的推移而逐渐增加:

在此处输入图像描述

在大约 4 周的正常运行时间之后,它最终导致问题/崩溃(这是有道理的,因为我在 EC2 上使用 m1.large 实例 => 8GB RAM,并且 RAM 似乎以大约 1.5 GB / 周的速度增加)。

如果我重新启动我的 node.js 应用程序,内存使用会重置。然而......我正在通过 跟踪我的内存使用情况process.memoryUsage(),甚至在大约 1 周后,我看到

{"rss":"693 Mb","heapTotal":"120 Mb","heapUsed":"79 Mb"}

我错过了什么?显然泄漏在节点中,但该过程似乎没有意识到它......

4

1 回答 1

1

您可以尝试node-memwatch模块,它有助于在 Node.js 中进行泄漏检测和堆差异。

堆差异看起来类似于:

{
  "before": { "nodes": 11625, "size_bytes": 1869904, "size": "1.78 mb" },
  "after":  { "nodes": 21435, "size_bytes": 2119136, "size": "2.02 mb" },
  "change": { "size_bytes": 249232, "size": "243.39 kb", "freed_nodes": 197,
    "allocated_nodes": 10007,
    "details": [
      { "what": "String",
        "size_bytes": -2120,  "size": "-2.07 kb",  "+": 3,    "-": 62
      },
      { "what": "Array",
        "size_bytes": 66687,  "size": "65.13 kb",  "+": 4,    "-": 78
      },
      { "what": "LeakingClass",
        "size_bytes": 239952, "size": "234.33 kb", "+": 9998, "-": 0
      }
    ]
  }
于 2013-05-31T12:04:47.277 回答