nodejs 减少 v8 垃圾收集器内存使用
nodejs decrease v8 garbage collector memory usage
我正在使用 util 模块调试 nodejs 应用程序,而 heapUsed 值保持在 30-100MB 左右,heapTotal值增长到 1.4GB。
Here is a question about similar behaviour
我读到这是 v8 垃圾收集器的行为方式,但问题是如果 运行 在 512 MB 上,如何减少它分配的内存量(使其小于 1.4GB)例如设备
您需要控制最大内存大小标志(所有大小均以 MB 为单位)。
recommended amounts for a "low memory device" are:
node --max-executable-size=96 --max-old-space-size=128 --max-semi-space-size=1 app.js
对于 32 位 and/or Android 和
node --max-executable-size=192 --max-old-space-size=256 --max-semi-space-size=2 app.js
对于 64 位非android。
这些将分别将堆总量限制为 225mb 和 450mb。它不包括 JS 之外的内存使用。例如缓冲区被分配为 "c memory" ,而不是在 JavaScript 堆中。
您还应该知道,越接近堆限制,GC 浪费的时间就越多。例如。如果您的内存使用率为 95%,则 CPU 的 90% 将用于 GC,而 10% 将用于 运行 实际代码(不是实数,但给出了总体思路)。所以你应该尽可能慷慨地设置限制,并且永远不要超过最大内存使用量的 16%(即 heapUsed/limit
不应大于 0.16
)。 16% 只是我从一些论文中想起的,它可能不是最优的。
标志:
--max-executable-size
为可执行代码保留的最大堆大小(即时编译的本机代码结果JavaScript)。
--max-old-space-size
为长期对象保留的最大堆大小
--max-semi-space-size
为短期对象保留的最大堆大小
我正在使用 util 模块调试 nodejs 应用程序,而 heapUsed 值保持在 30-100MB 左右,heapTotal值增长到 1.4GB。
Here is a question about similar behaviour
我读到这是 v8 垃圾收集器的行为方式,但问题是如果 运行 在 512 MB 上,如何减少它分配的内存量(使其小于 1.4GB)例如设备
您需要控制最大内存大小标志(所有大小均以 MB 为单位)。
recommended amounts for a "low memory device" are:
node --max-executable-size=96 --max-old-space-size=128 --max-semi-space-size=1 app.js
对于 32 位 and/or Android 和
node --max-executable-size=192 --max-old-space-size=256 --max-semi-space-size=2 app.js
对于 64 位非android。
这些将分别将堆总量限制为 225mb 和 450mb。它不包括 JS 之外的内存使用。例如缓冲区被分配为 "c memory" ,而不是在 JavaScript 堆中。
您还应该知道,越接近堆限制,GC 浪费的时间就越多。例如。如果您的内存使用率为 95%,则 CPU 的 90% 将用于 GC,而 10% 将用于 运行 实际代码(不是实数,但给出了总体思路)。所以你应该尽可能慷慨地设置限制,并且永远不要超过最大内存使用量的 16%(即 heapUsed/limit
不应大于 0.16
)。 16% 只是我从一些论文中想起的,它可能不是最优的。
标志:
--max-executable-size
为可执行代码保留的最大堆大小(即时编译的本机代码结果JavaScript)。--max-old-space-size
为长期对象保留的最大堆大小--max-semi-space-size
为短期对象保留的最大堆大小