nodejs减少v8垃圾收集器内存使用量

时间:2015-05-15 06:27:35

标签: node.js memory-management garbage-collection v8

我使用util模块调试nodejs应用程序,而 heapUsed 值保持在30-100MB左右, heapTotal 值增长到1.4GB 。

Here is a question about similar behaviour

我已经读过这就是v8垃圾收集器的行为方式,但问题是如果在512 MB设备上运行,如何减少它分配的内存量(使其小于1.4GB)< / p>

1 个答案:

答案 0 :(得分:24)

您需要控制最大内存大小标记(所有大小均以MB为单位)。

recommended amounts for a "low memory device" are

node --max-executable-size=96 --max-old-space-size=128 --max-semi-space-size=1 app.js

用于32位和/或Android和

node --max-executable-size=192 --max-old-space-size=256 --max-semi-space-size=2 app.js

用于64位非android。

这些将分别将堆总数限制为225mb和450mb。它不包括JS之外的内存使用。例如,缓冲区被分配为&#34; c memory&#34; ,而不是在JavaScript堆中。

此外,您应该知道,您越接近堆限制,GC浪费的时间就越多。例如。如果你的内存使用率为95%,那么90%的CPU将用于GC,10%用于运行实际代码(不是实数,而是提供一般的想法)。所以你应该尽可能地保持极限,并且永远不要超过最大内存使用量的16%(I.E. heapUsed/limit不应该大于0.16)。我从一些论文中回忆起16%,这可能不是最优的。

标志:

  • --max-executable-size为可执行代码保留的最大堆大小(即时编译JavaScript的本机代码结果)。
  • --max-old-space-size为长期对象保留的最大堆大小
  • --max-semi-space-size为短期对象保留的最大堆大小