🎃
【解決済】メモリ不足によるエラーが発生。FATAL ERROR: Ineffective mark-compacts near heap..
状況
VPSにてUbuntuを導入しており、メモリサイズ1Gでストレージサイズは25Gの最小限の環境を準備していました。
Next.jsのアプリをデプロイしようと、npm run build
を実行した結果、メモリ不足により下記エラーが発生..
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory...
エラーの概要
このエラーは、V8エンジンのJavaScriptヒープメモリが不足したために発生します。
npu run build
はNext.jsアプリケーションをビルドするコマンドで、CPUとメモリを多く消費し、VPSが1GBのメモリしかない場合、ビルドプロセス中にメモリが不足し、V8がヒープ領域を拡張できなくなった結果、このエラーが発生。
解決手順
1. Swapを有効化
物理メモリが不足している場合、スワップ領域を追加して仮想メモリを増やすことができる
- Swap領域を作成
# スワップ領域を一時的に無効にする
sudo swapoff /swapfile
# /swapfileのサイズを4GB(任意)に拡張
sudo fallocate -l 4G /swapfile
# ファイルの権限を設定
sudo chmod 600 /swapfile
# スワップ領域を再初期化
sudo mkswap /swapfile
# スワップを有効化
sudo swapon /swapfile
# スワップ領域が正しく拡張されたことを確認
swapon --show
# または下記で確認
free -h
スワップを有効化すると、メモリ不足時にディスクを利用して処理を続行できる
2. Node.jsにヒープメモリサイズの上限を増やす
デフォルトのヒープメモリ上限は、Node.jsのバージョンや環境に応じて約512MB~1.5GB程度なので、以下の方法で、メモリ上限を拡張し実行してみる
NODE_OPTIONS="--max-old-space-size=4096" npm run build
-
4096
はヒープメモリの上限を4GBに設定します。メモリ状況に応じてこの値を調整できます。
dehadeha~
Discussion