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为短期对象保留的最大堆大小