【问题标题】:How can I limit memory usage in node.js on the node-side (not OS side)?如何在节点端(而不是操作系统端)限制 node.js 中的内存使用?
【发布时间】:2014-09-18 19:41:01
【问题描述】:

我的进程Killed 是由内存不足杀手获取的。我想做的是告诉节点“不要使用这么多内存”,如果它不能分配一些垃圾,就抛出一个异常,这样我就可以避免被 oom 杀手杀死,并有可能在代码中处理它。这可能吗?我该怎么做?

【问题讨论】:

  • 您不能只追踪并修改导致您的内存问题的特定代码吗?即使你可以为它设置一些更小的上限,以防止“被 oom 杀手杀死”,当达到限制时你会怎么做?
  • 也许这里有一些东西:blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections? (浏览博客。)
  • 或者这里(第 5 部分):hacks.mozilla.org/category/a-node-js-holiday-season?
  • @mscdex 这是追踪它的一部分。如果我的代码在内存不足时抛出异常,至少当它达到内存上限时我会知道它在哪里。没有它,我将重新使用控制台日志来确定它死在哪里。真正很棒的是某种分析器,它可以告诉我代码的哪些部分导致了哪些内存开销。
  • @DOCSAREL 谢谢.. 但我不会浏览随机博客,因为他们回答了我非常具体的问题。我不得不假设我的谷歌搜索会涵盖这一点。

标签: node.js memory-management out-of-memory


【解决方案1】:

npm 上有各种模块可以帮助您找出是什么占用了这么多内存。

开始:

  • node-webkit-agent 允许您在 Chrome 开发人员工具中进行内存(和 CPU)分析以及获取和比较堆快照。

  • heapdump 以及有关使用它的相关文章here。如果您不想要/不需要 node-webkit-agent 的所有功能并希望定期将堆转储从您的代码保存到磁盘,这将非常有用。

  • node-inspector 用于交互式调试和实时检查变量等。

【讨论】:

  • +1 用于调试建议,但从技术上讲,它没有回答我如何优雅地处理节点端内存不足问题的问题。
  • 你不能优雅地处理内存不足的问题,因为它来自 V8。现在你能做的最“优雅”的事情是让forever 模块、monit、systemd 等在它意外死亡时自动重启你的进程。
  • 实际上,我的问题来自 linux 内存不足杀手,它会在系统内存不足或程序使用过多内存时终止进程。所以我的问题绝对不是来自 V8。你是说如果我确实限制了V8/node端的内存,还是不优雅?我仍然希望知道如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 2012-04-24
  • 2022-01-16
  • 2015-03-27
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 2011-06-24
相关资源
最近更新 更多