Published on

Node.jsがヒープ領域不足で落ちてしまったので対処してみた

Authors

ある時、このようなログが発生してNode.jsが頻繁に落ちるようになりました。

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

↓前後のログ 4186e71daa6a1d7dbcd1acf644873fb0.png

エラーログを読むと、Node.jsのヒープ内領域が足りていないと書いてありました。

調べてみると、--max-old-space-sizeの値をデフォルトより大きくするといいとの情報が出てきました。

設定はNode.jsの起動コマンドに--max-old-space-size=値を付与するか、環境変数に下記の通り指定すると設定が可能です。

export NODE_OPTIONS="--max-old-space-size=値"

デフォルトのヒープサイズは1400MBという記事を見つけましたが、他の値がデフォルトになっている場合もあるそうです。 デフォルト値はこのコマンドで確認が可能です。

node -e 'console.log(Math.floor(v8.getHeapStatistics().heap_size_limit/1024/1024))'

適切な値については、デフォルト値から徐々に上げてログをチェックするのがいいのではないかと思います。

以前、エラーが出たときはデフォルト値が1400MBだったため、2048MBを試したところ解消されず、最終的に--max-old-space-size=3072にすると解消されました。

参考

https://zenn.dev/ubie_dev/articles/f64561d59918d1

https://qiita.com/yamatai12/items/26349f468e398c73952e#--max-old-space-sizeのデフォルト値の算出方法

https://qiita.com/kawanet/items/cfedd535990b32710c50

https://zenn.dev/yusuke_docha/articles/f8c3cd88302d16