Node.JS 进程使用了​​ 1.4 GB 的内存,但是 heapdump 只有 300 MB

Ove*_*erv 5 v8 node.js

我正在运行一个带有 Node.JS 的 Socket.IO 服务器,它通常使用大约 400 MB 的内存,因为有很多数据被缓存发送到客户端。然而,几个小时后,它突然开始在大约 40 分钟内增长到 1.4 GB。有人告诉我使用 heapdump 来查找是否存在内存泄漏。

问题是堆转储结果只有 317 MB,而且里面没有任何异常,所以我一直在调试。我还使用 nodetime 运行它,它表示 V8 堆使用量约为 400 MB,但 V8 堆总大小为 1.4 GB。

如何找出剩余的 1 GB 来自哪里?

Cha*_*own 0

也许 node-memwatch 可以帮助你?

https://github.com/lloyd/node-memwatch

来自其自述文件:

node-memwatch 可以帮助您检测和查找 Node.JS 代码中的内存泄漏。它提供:

泄漏事件,当您的代码出现内存泄漏时发出。

偶尔发出的统计事件,为您提供描述堆使用情况和随时间变化的趋势的数据。

HeapDiff 类可让您比较两个时间点之间的堆状态,告诉您已分配的内容和已释放的内容。