一尘不染

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

node.js

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

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


阅读 222

收藏
2020-07-07

共1个答案

一尘不染

您需要控制最大内存大小标志(所有大小以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%只是我从某些论文中得出的结论,它可能不是最理想的。

标志:

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