2011-08-25 74 views
43

在網絡中的很多地方,您將看到:Node.js(和chrome V8)中的內存限制

節點進程的內存限制是多少?

和答案:

目前,通過默認V8具有512MB的32位系統的存儲器限制,以及在64位的系統1GB。通過將--max-old-space-size設置爲最大值〜1gb(32位)和〜1.7gb(64位),可以提高限制,但建議您將單個進程拆分爲多個工人如果你正在達到內存限制。

有人可以確認這是情況,因爲node.js似乎經常更新? * 更重要的是,在不久的將來會是這樣嗎? *

我想編寫JavaScript代碼,這可能要處理JavaScript對象的4GB(和速度可能不是一個問題)

如果我不能在節點做到這一點,我最終會做在Java(在64位機器上),但我寧願不...

+5

什麼在世界上可以佔用4GB的JS對象? –

+23

@ dominic-barnes:圖片。電影。哎呀,這有什麼關係嗎?有一天會有的。例如,一個MMORPG。我同意這些限制是殘酷的,並且在v8的原始草案中使用32位整數進行尋址是嚴重的程序員錯誤。 –

+0

如果你想擁有4GB的數據,你不能把它作爲JS對象。也許這個鏈接可以幫助嗎? https://developer.mozilla.org/en/javascript_typed_arrays – goatslacker

回答

1

看起來像一個真實的。當我試圖分配緩衝區中的50 Mb字符串var buf = new Buffer(50*1024*1024);時,我得到了致命錯誤FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory。我在進程監視器中修復了大約457 Mb的nodejs內存使用情況。

16

這對於一些使用Node.js的人來說是一個很大的擔憂,並且有好消息。 V8的新內存限制現在還未知(未經測試),適用於64位,在32位環境中提高到32位地址空間。

更多在這裏閱讀:http://code.google.com/p/v8/issues/detail?id=847

+2

我仍然(即使有64位)需要指定我需要更多的內存與--max-old-space-size = 10000(對於10GB)選項,否則我會得到「致命錯誤:CALL_AND_RETRY_2分配失敗 - 進程內存不足「Windows上任務管理器的內存使用量約爲1.7GB。 –

+1

我在v7.8.0中使用8gb +很容易 - 只是希望我的機器有更多的內存 – JoeRocc

5

我運行一個進程現在,有一個明確的內存泄漏和節點0.6.0是推8GB Ubuntu Linux操作系統。認爲它的處理:)。

-5

node --max-old-space-size flag = chrome

+4

這不是一個答案。 –