我正在使用util模块调试nodejs应用程序,而 heapUsed 值保持在30-100MB左右,而 heapTotal 值增长到1.4GB。
我已经读到这是v8垃圾收集器的行为方式,但是问题是,例如在512 MB设备上运行时,如何减少其分配的内存量(使其小于1.4GB)
您需要控制最大内存大小标志(所有大小以MB为单位)。
对于“低内存设备”,建议的数量为:
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外部的内存使用情况。例如,缓冲区被分配为“ c memory”,而不是在JavaScript堆中。
您还应该知道,越接近堆限制,GC中浪费的时间就越多。例如,如果您的内存使用率为95%,则90%的CPU将用于GC,而10%的CPU将用于运行实际代码(不是实数,而是给出总体思路)。因此,您应该尽可能地宽大,并且不要超过最大内存使用量的16%(IE heapUsed/limit不应大于0.16)。16%只是我从某些论文中得出的结论,它可能不是最理想的。
heapUsed/limit
0.16
标志:
--max-executable-size
--max-old-space-size
--max-semi-space-size