max_old_space_size设置为4GB,实际限制为2GB
max_old_space_size set to 4gb, actually limits to 2GB
我正在 Gentoo Linux 64 位下编写 NodeJS 6.3.1 应用程序。
在这台机器上,我通常有 9GB 的 16GB 可用内存和 49GB 的交换空间 space 几乎没有使用。
我使用以下代码来测试我的 node.js 应用程序的内存限制:
var arr = [];
var c=0;
while(arr.push('foo')) {if (++c%100000 == 0) {console.info(process.memoryUsage());}}
运行 这个脚本没有额外的节点参数,最后的 memoryUsage 行是这样的:
{ rss: 1032232960, heapTotal: 1015185408, heapUsed: 1008680024 }
现在 运行 node.js 和 --max_old_space_size=4096
,最后的 memoryUsage 行是这样的:
{ rss: 2202341376, heapTotal: 2189082624, heapUsed: 2177311480 }
现在有 8000 个限制:
{ rss: 1934946304, heapTotal: 1921712128, heapUsed: 1909919344 }
我错过了什么?如何将堆增加到 4 或 8GB?
我认为这是V8的限制。它不会在 64 位机器上使用超过 1.7 GB 的 RAM。引自常见问题解答:
Currently, by default v8 has a memory limit of 512mb on 32-bit
systems, and 1gb on 64-bit systems. The limit can be raised by setting
--max-old-space-size to a maximum of ~1gb (32-bit) and ~1.7gb (64-bit), but it is recommended that you split your single process
into several workers if you are hitting memory limits.
我正在 Gentoo Linux 64 位下编写 NodeJS 6.3.1 应用程序。 在这台机器上,我通常有 9GB 的 16GB 可用内存和 49GB 的交换空间 space 几乎没有使用。
我使用以下代码来测试我的 node.js 应用程序的内存限制:
var arr = [];
var c=0;
while(arr.push('foo')) {if (++c%100000 == 0) {console.info(process.memoryUsage());}}
运行 这个脚本没有额外的节点参数,最后的 memoryUsage 行是这样的:
{ rss: 1032232960, heapTotal: 1015185408, heapUsed: 1008680024 }
现在 运行 node.js 和 --max_old_space_size=4096
,最后的 memoryUsage 行是这样的:
{ rss: 2202341376, heapTotal: 2189082624, heapUsed: 2177311480 }
现在有 8000 个限制:
{ rss: 1934946304, heapTotal: 1921712128, heapUsed: 1909919344 }
我错过了什么?如何将堆增加到 4 或 8GB?
我认为这是V8的限制。它不会在 64 位机器上使用超过 1.7 GB 的 RAM。引自常见问题解答:
Currently, by default v8 has a memory limit of 512mb on 32-bit systems, and 1gb on 64-bit systems. The limit can be raised by setting --max-old-space-size to a maximum of ~1gb (32-bit) and ~1.7gb (64-bit), but it is recommended that you split your single process into several workers if you are hitting memory limits.