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

Her*_*ler 13 garbage-collection memory-management v8 node.js

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

这是一个关于类似行为的问题

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

Esa*_*ija 24

您需要控制最大内存大小标志(所有大小均以MB为单位).

"低内存设备"建议量为:

node --max-executable-size=96 --max-old-space-size=128 --max-semi-space-size=1 app.js
Run Code Online (Sandbox Code Playgroud)

适用于32位和/或Android和

node --max-executable-size=192 --max-old-space-size=256 --max-semi-space-size=2 app.js
Run Code Online (Sandbox Code Playgroud)

对于64位非android.

这些将分别将堆总数限制为225mb和450mb.它不包括JS之外的内存使用.例如,缓冲区被分配为"c内存",而不是JavaScript堆中.

此外,您应该知道,您越接近堆限制,GC中浪费的时间就越多.例如,如果你的内存使用率为95%,那么90%的CPU将用于GC,10%用于运行实际代码(不是实数,而是提供一般的想法).所以你应该尽可能慷慨的限制,永远不要超过最大内存使用量的16%(IE heapUsed/limit不应该大于0.16).16%是我从某篇论文中回忆起来的东西,它可能不是最优的.

标志:

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

  • @Esailija 现在对于来自 Google 并且没有 V8 内存管理/GC 背景的每个人来说都更加清晰。+1 (2认同)