2016-07-26 1421 views
2

我正在Gentoo Linux 64位下編寫一個NodeJS 6.3.1應用程序。 在這臺機器中,我通常在16GB可用內存和49GB交換空間中幾乎沒有使用9GB。max_old_space_size設置爲4GB,實際上限制爲2GB

我用下面的代碼來測試我的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?

回答

1

我認爲這是V8的限制。它在64位機器上不使用超過1.7 GB的RAM。從FAQ引用:

目前,通過默認V8具有512MB的32位 系統的存儲器限制,以及在64位的系統1GB。通過將最大舊空間大小設置爲 ,可以提高極限,最大值爲〜1GB(32位)和〜1.7GB(64位),但建議您將單個進程 分割爲如果你遇到內存限制,幾名工人。

+0

謝謝。這總是如此?許多在線教程顯示他們將最大舊空間大小增加到4GB或8GB。 – ufk