簡體   English   中英

nodejs內存不足

[英]nodejs out of memory

我今天遇到了一個奇怪的問題。 對於其他人來說,這可能是一個簡單的答案,但它讓我難過。 為什么下面的代碼會導致內存錯誤?

var cur = 167772160;
var bcast = 184549375;
var addresses = [];
while (cur <= bcast){
  cur += 1;
  addresses.push(cur);
}
addresses.length 
addresses // memory goes from a few megs to over a gig in seconds when trying to print this

我得到了這兩個錯誤中的一個......第一個是我在節點的解釋器中運行這個代碼而后者是我通過nodeunit運行它時:

致命錯誤:CALL_AND_RETRY_2分配失敗 - 處理內存不足

致命錯誤:JS分配失敗 - 處理內存不足

您可以通過傳遞--max-old-space-size=<value>來增加默認限制,以MB為單位。

該示例將允許節點堆使用最多4GB(4096 兆字節 )的內存:

node --max-old-space-size=4096 app

當我嘗試訪問陣列時會發生這種情況。 但是獲得長度卻沒有。

> var cur = 167772160;
> var bcast = 184549375;
> var addresses = [];
> while (cur <= bcast){
...   cur += 1;
...   addresses.push(cur);
... }
16777216
> addresses.length 
16777216
> addresses
FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

這是另一個SO問題, Node.js(和chrome V8)中的內存限制與內存使用問題有關。

運行腳本時,我沒有收到內存分配錯誤。 你的系統有多少RAM?

使用作者的更新說明編輯確定,我可以復制它。

Node正在嘗試將整個數組轉換為字符串。 該數組長16777216個元素。 每個元素包含至少9位數的數字。 將其轉換為長度為150,994,994個字符的字符串。 它只是一個超出節點內存容量的巨大操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM