🎃

【解決済】メモリ不足によるエラーが発生。FATAL ERROR: Ineffective mark-compacts near heap..

2025/01/17に公開

状況

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を有効化

物理メモリが不足している場合、スワップ領域を追加して仮想メモリを増やすことができる

  1. 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