【问题标题】:What's the node.js memory breakdown?什么是 node.js 内存故障?
【发布时间】:2012-10-19 01:45:29
【问题描述】:

我们正在部署一个 Node.js 应用程序。这个应用程序消耗的 RSS 内存似乎比它应该的要多。所以我们开始深入研究,我们发现了以下内容,感谢process.memoryUsage();

  • RSS 内存快速增长到 400MB 左右,在 400MB-500MB 中或多或少保持稳定,有小涨小跌(垃圾收集器运行?)

  • heapUsed 快速增长到 50MB,然后保持在该级别(20MB 到 100MB 之间)。

  • heaptotal 总是比 heapUsed 多大约 30MB。

如您所见,堆和 RSS 之间存在巨大差异,我认为这是我们应该关注的地方。我们的堆中似乎没有任何非常严重的泄漏。

现在,RSS 中有什么不在堆中?我相信 C 扩展和缓冲区,对吧?如果是这样,我们如何调试它。我们还应该寻找什么?

【问题讨论】:

  • 你没有说明问题。你想完成什么?
  • 我想知道 node.js 应用程序消耗的内存的细目,特别是为什么堆大小和 RSS 消耗之间存在如此大的差异。
  • 我们有这个应用程序,它显然在浪费我们的资源。我们希望更好地利用它们。
  • 如果有一个参数可以在运行时通过节点传递给 V8 以更改 RSS,我不会感到惊讶
  • Nodejs 人应该明确地更新文档,因为就目前 (nodejs.org/api/process.html#process_process_memoryusage) 而言,我们基本上处于黑暗之中;没有人确切知道 rss、heapused 和 heaptotal 代表什么。

标签: node.js memory heap-memory


【解决方案1】:

如果不知道您的应用在做什么,就不可能对此发表评论。

如果 V8 堆使用量明显低于 RSS,那么是的,它必须是外部缓冲区和非 V8 对象使用的其他内存。

你能公开一些代码吗?

【讨论】:

  • 很遗憾没有公开。那么,RSS = 堆 + 缓冲区 + C 库?
  • @JulienGenestoux 你检查过node --v8-options吗?也许那里有一个设置会限制内存使用。
  • @EhevuTov 我真的不想限制内存使用,因为这可能会杀死应用程序。我只是想知道这段记忆要去哪里(以及为什么)。
  • @JulienGenestoux 我假设它是预分配内存。 V8 使用堆。根据需要,堆对于 malloc() 和 dealloc() 来说相对昂贵,因此它是预先分配的。这就是为什么我说在运行时使用node --v8-options 进行调优可能是你应该看到的
  • 有没有办法“查看”分配的缓冲区是什么?
猜你喜欢
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2020-06-05
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多