Node.js nodejs减少v8垃圾收集器内存使用

Node.js nodejs减少v8垃圾收集器内存使用,node.js,memory-management,garbage-collection,v8,Node.js,Memory Management,Garbage Collection,V8,我正在调试一个带有模块的nodejs应用程序,heapUsed值保持在30-100MB左右,heapTotal值增长到1.4GB 我已经读到,这就是v8垃圾收集器的行为方式,但问题是如果在512 MB设备上运行,如何减少它分配的内存量(使其小于1.4GB)。例如,您需要控制最大内存大小标志(所有大小都以MB为单位) 委员会: 适用于32位和/或Android和 node --max-executable-size=192 --max-old-space-size=256 --max-semi-

我正在调试一个带有模块的nodejs应用程序,heapUsed值保持在30-100MB左右,heapTotal值增长到1.4GB


我已经读到,这就是v8垃圾收集器的行为方式,但问题是如果在512 MB设备上运行,如何减少它分配的内存量(使其小于1.4GB)。例如,您需要控制最大内存大小标志(所有大小都以MB为单位)

委员会:

适用于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内存”,而不是在JavaScript堆中

您还应该知道,离堆限制越近,在GC中浪费的时间就越多。例如,如果您的内存使用率为95%,那么90%的CPU将用于GC,10%用于运行实际代码(不是实数,但给出总体思路)。因此,您应该尽可能慷慨地接受限制,并且不要超过最大内存使用量的16%(即
heapUsed/limit
不应大于
0.16
)。16%只是我从一些论文中回忆到的,它可能不是最理想的

旗帜:

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

在64位ubuntu上测试它,现在heapTotal的内存保持在260-280MB左右,不知道这些数字是从哪里来的?我不明白你的问题,关键是使用标志来减少v8将用于JS的总内存。你能解释一下标志吗?−1请解释这些标志的作用和用途,否则您的答案是不完整的。@Esailija现在对于所有来自谷歌且没有V8内存管理/GC背景的人来说,这更清楚了+1.
node --max-executable-size=192 --max-old-space-size=256 --max-semi-space-size=2 app.js