max_old_space_size设置为4GB,实际上限制为2GB

我在Gentoo Linux 64位下编写NodeJS 6.3.1应用程序。 在这台机器上,我通常有16GB的可用内存和49GB的交换空间,几乎没有使用。

我使用下面的代码来testing我的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 } 

现在使用--max_old_space_size=4096运行node.js,最后一个memoryUsage行是这样的:

 { rss: 2202341376, heapTotal: 2189082624, heapUsed: 2177311480 } 

现在有8000个限制:

 { rss: 1934946304, heapTotal: 1921712128, heapUsed: 1909919344 } 

我错过了什么? 我怎样才能把堆增加到4或8GB?

我认为这是V8的限制。 它不会在64位机器上使用超过1.7 GB的RAM。 从常见问题引用:

目前,默认情况下,v8在32位系统上具有512mb的内存限制,在64位系统上具有1gb的内存限制。 通过将-max-old-space-size设置为最大值〜1GB(32位)和〜1.7GB(64位),可以提高限制,但build议您将单个进程拆分为多个工人如果你正在打内存限制。

Interesting Posts