【问题标题】:Limit Node.js memory usage to less than 300MB per process将 Node.js 内存使用限制为每个进程小于 300MB
【发布时间】:2016-03-09 00:59:03
【问题描述】:

我们在单独的进程中运行测试,我们的一些测试套件包含 20 多个文件。我们如何将 Node.js 进程使用的内存量限制(而不是增加)小于 300MB?如果我们不限制内存,我们最多可以使用 20x500MB,大约是 10GB,这太多了。

我可以在网上找到一些关于增加内存的文章,但我找不到任何关于限制每个进程的内存的文章。

具体来说,我们正在使用核心 child_process 模块来创建子进程,我想我们需要一些标志或参数来传递给 cp 以指定各种内存上限。

【问题讨论】:

  • groups.google.com/forum/#!topic/nodejs/IYsQ_bXlzcg 包含这样一个短语:“2)使用 --max-old-space-size 标志设置内存限制更低或更高”。你试过这个参数吗?
  • 实际上我看到了几种减少内存的方法:1)重写代码以使用更少的内存,以避免memleaks并更有效地使用GC,2)更频繁地使用GC(--max-old-space- size), 3) 设置操作系统的引号来杀死超过它们的进程。
  • 我尝试了这个节点 --max_old_space_size=100 并且成功了,然后我尝试了节点 --max_old_space_size=10 并且成功了,然后我尝试了节点 --max_old_space_size=1 并且它被轰炸了,所以它似乎工作:)
  • 好的,那我就根据自己的想法来做个回答吧,没那么有用,顺其自然吧:)

标签: node.js memory process


【解决方案1】:

有用的链接:

nodejs decrease v8 garbage collector memory usage

https://groups.google.com/forum/#!topic/nodejs/IYsQ_bXlzcg

https://www.quora.com/How-does-Node-js-do-memory-allocation

要考虑的选项:

–nouse-idle-notification

--expose-gc + 代码中的 gc() 函数。

–max-old-space-size

–max-new-space-size

--max-semi-space-size

同样为了减少内存,可以使用更少的内存消耗算法,代码可以更加 GC 友好。本机 C++ 模块也可以提供帮助,但请使用 valgrind 彻底检查它们是否存在内存泄漏和错误。

还可以应用来自操作系统的引用来杀死超出某些内存限制的进程。

我知道,没有一些有意识的选项描述,这个答案不是那么有用,但我现在还不是很好学,所以这个“答案”只是一个方向。

【讨论】:

  • 谢谢 :) 我也在寻找一种方法,给定这些节点选项,在节点中分叉 child_process 时传递这些选项
  • 这个nodejs.org/api/child_process.html 没有明确说明如何或是否可能
  • 似乎 node.js 不像 POSIX 那样分叉,即 node.js 总是需要可执行文件并允许指定可执行参数。所以可执行文件将是“节点”,参数将是:--max-bla-bla your_script.js。我还研究了如何强制 node.js 在运行某些脚本时使用某些选项。有人对我的话题投了反对票,但这对我有帮助。 stackoverflow.com/questions/32798347/…
猜你喜欢
  • 2011-10-16
  • 2012-09-28
  • 1970-01-01
  • 2023-04-05
  • 2011-06-18
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
相关资源
最近更新 更多