nodejs-v8

Node.js V8 old space, JavaScript heap out of memory

by AIcclemon
0 留言
nodejs v8

最近在透過 AWS codebuild 部署專案時發現 build fail,追查 log 後發現噴了這行錯誤:

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

原因為 V8 在預設堆疊使用的記憶體預設只有 512MB,然而這不在官網沒有明確指出有這個限制,以下是我在搜尋過後找到的解決方法:

「old-space」是 V8 引擎管理(也稱為垃圾收集)的堆積區(即 JavaScript 物件存放的地方)中最大且高度可配置的部分, –max-old-space-size 標誌用於控制其最大大小。當記憶體使用接近極限時,V8 將花費更多時間進行垃圾收集,以釋放未使用的記憶體。

如果堆積區記憶體使用(即 GC 無法釋放的活動物件)超過限制,V8 將使您的進程崩潰(由於缺乏替代方案),因此您不想將其設定得太低。當然,如果您將其設置得太高,那麼 V8 允許的額外堆積區使用可能會導致整個系統內存不足(並且由於缺乏替代方案而進行交換或強制終止隨機進程)。

總而言之,在擁有 2GB 記憶體的電腦上,我建議將 –max-old-space-size 設定為大約 1.5GB,以留出一些記憶體供其他用途使用並避免進行交換。

設定方式

方法一: 環境變數

export NODE_OPTIONS="--max-old-space-size=5120" # Increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=6144" # Increase to 6 GB
export NODE_OPTIONS="--max-old-space-size=7168" # Increase to 7 GB
export NODE_OPTIONS="--max-old-space-size=8192" # Increase to 8 GB

# and so on...

# formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" # Increase to X GB

# Note: it doesn't have to be multiples of 1024.
# max-old-space-size can be any number of memory megabytes (MB) you have available.

方法二: Commend line

node --max_old_space_size=5000 yourapp.js

方法三: 透過專案執行

{
	"start": "cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack"
}

參考文章: https://stackoverflow.com/questions/53230823/fatal-error-ineffective-mark-compacts-near-heap-limit-allocation-failed-javas

最近在透過 AWS codebuild 部署專案時發現 build fail,追查 log 後發現噴了這行錯誤:

|FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory|
|201|

原因為 V8 在預設堆疊使用的記憶體預設只有 512MB,然而這不在官網沒有明確指出有這個限制,以下是我在搜尋過後找到的解決方法:

![[Pasted image 20231228124640.png]]

「old-space」是 V8 引擎管理(也稱為垃圾收集)的堆積區(即 JavaScript 物件存放的地方)中最大且高度可配置的部分, –max-old-space-size 標誌用於控制其最大大小。當記憶體使用接近極限時,V8 將花費更多時間進行垃圾收集,以釋放未使用的記憶體。

如果堆積區記憶體使用(即 GC 無法釋放的活動物件)超過限制,V8 將使您的進程崩潰(由於缺乏替代方案),因此您不想將其設定得太低。當然,如果您將其設置得太高,那麼 V8 允許的額外堆積區使用可能會導致整個系統內存不足(並且由於缺乏替代方案而進行交換或強制終止隨機進程)。

總而言之,在擁有 2GB 記憶體的電腦上,我建議將 –max-old-space-size 設定為大約 1.5GB,以留出一些記憶體供其他用途使用並避免進行交換。

設定方式

方法一: 環境變數

export NODE_OPTIONS="--max-old-space-size=5120" # Increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=6144" # Increase to 6 GB
export NODE_OPTIONS="--max-old-space-size=7168" # Increase to 7 GB
export NODE_OPTIONS="--max-old-space-size=8192" # Increase to 8 GB

# and so on...

# formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" # Increase to X GB

# Note: it doesn't have to be multiples of 1024.
# max-old-space-size can be any number of memory megabytes (MB) you have available.

方法二: Commend line

node --max_old_space_size=5000 yourapp.js

方法三: 透過專案執行

{
	"start": "cross-env NODE_OPTIONS=--max-old-space-size=8192 webpack"
}

參考文章: https://stackoverflow.com/questions/53230823/fatal-error-ineffective-mark-compacts-near-heap-limit-allocation-failed-javas

你也許喜歡

發表留言