Node.js nodejs减少v8垃圾收集器内存使用
我正在调试一个带有模块的nodejs应用程序,heapUsed值保持在30-100MB左右,heapTotal值增长到1.4GBNode.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-
我已经读到,这就是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%只是我从一些论文中回忆到的,它可能不是最理想的
旗帜:
为可执行代码保留的最大堆大小(即时编译JavaScript的本机代码结果)李>--max executable size
为长期对象保留的最大堆大小--max old space size
为短期对象保留的最大堆大小--最大半空间大小
node --max-executable-size=192 --max-old-space-size=256 --max-semi-space-size=2 app.js