nodejs减less了v8垃圾收集器的内存使用量
我正在使用util模块debuggingnodejs应用程序,而heapUsed值保持在30-100MB左右, heapTotal值增长到1.4GB。
这是一个关于类似行为的问题
我读过,这是如何V8垃圾收集器的行为方式,但问题是如何减less它分配的内存量(使其小于1.4GB),例如,如果在512 MB设备上运行例如
您需要控制最大内存大小标志(所有大小都以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内存”,而不是在JavaScript堆中。
你也应该知道,你越接近堆限制,在GC中浪费的时间就越多。 例如,如果你的内存使用率是95%,那么90%的CPU将用于GC,10%用于运行实际的代码(不是真正的数字,但给出一般的想法)。 所以你应该尽可能的heapUsed/limit
,不要超过最大内存使用量的16%(IE heapUsed/limit
不应该大于0.16
)。 16%是我从某篇论文中回想起来的,可能不是最优的。
标志:
-
--max-executable-size
为可执行代码保留的堆的最大大小(即时编译JavaScript的本机代码结果)。 -
--max-old-space-size
为长期对象保留的最大堆大小 -
--max-semi-space-size
为短期对象保留的最大堆大小