【问题标题】:Node.JS process uses 1.4 GB of memory, but heapdump is only 300 MBNode.JS 进程使用 1.4 GB 内存,但 heapdump 只有 300 MB
【发布时间】:2014-05-07 21:05:30
【问题描述】:

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

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

如何找出剩余 1 GB 的来源?

【问题讨论】:

  • 有趣的问题,不知道,但是...您是否尝试过更改 nodejs 版本和/或验证是否有任何theese 问题适用?
  • 我在使用 TCP 套接字时遇到了同样的问题。
  • 你解决了吗?我在使用 einaros websockets 时遇到了同样的问题。
  • @DeaglinG 不,我最终得到了一个每隔几个小时重新启动一次进程的 cronjob。
  • 不确定它是否有帮助,但我认为它与关闭 websockets 回调有关。你应该尽量不要在发送命令的发送/错误回调中使用任何来自高分的变量。

标签: node.js v8


【解决方案1】:

也许 node-memwatch 可以帮助你?

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

来自其自述文件:

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

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

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

一个 HeapDiff 类,可让您比较堆的状态 两个时间点,告诉你分配了什么,分配了什么 被释放了。

【讨论】:

  • 如果 v8 堆使用本身正是应有的方式,您确定这会对我有所帮助吗?
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多