我使用util模块调试nodejs应用程序,而 heapUsed 值保持在30-100MB左右, heapTotal 值增长到1.4GB 。
Here is a question about similar behaviour
我已经读过这就是v8垃圾收集器的行为方式,但问题是如果在512 MB设备上运行,如何减少它分配的内存量(使其小于1.4GB)< / p>
答案 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
为短期对象保留的最大堆大小