Nuxt.jsでファイルをビルドした際に、途中でメモリが不足してエラーとなり止まってしまう現象が発生しました。
エラー
JavaScript heap out of memory
エラーが発生しています。
$ nuxt build
(略)
<--- JS stacktrace --->
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
error Command failed with signal "SIGABRT".
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
yarn run v1.22.15
解決方法
package.jsonのbuild
に、ヒープのメモリ容量を設定する--max_old_space_size
のオプションを入れることで解決しました。(MB単位で設定する必要があります。)
NODE_OPTIONS=--max_old_space_size=3072
package.jsonの中身は以下のような形。
2048に最初は設定してみたのですが同様なメモリ不足のエラーが出たため、私は3072に設定しました。
3072に設定すると、無事ビルドを完了することができました。
(略)
"scripts": {
"dev": "nuxt",
"build": "NODE_OPTIONS=--max_old_space_size=3072 nuxt build",
(略)
},
(略)
node.jsの公式にも以下記載があります。
V8 の古いメモリセクションの最大メモリサイズを設定します。メモリ消費量が上限に近づくと、V8は未使用メモリを解放するためにガベージコレクションに多くの時間を費やすようになります。
2GiBのメモリを持つマシンでは、これを1536 (1.5 GiB)に設定し、他の用途にメモリを残し、スワップを回避することを検討してください。
Command-line API | Node.js v16.20.2 Documentation
まとめ
JavaScript heap out of memory
が発生した際は、根本原因を探るのが難しい場合NODE_OPTIONS=--max_old_space_size=xxxx
を適切な値に設定して試してみるのが良いです。
しかし、システムで利用可能なメモリが不足しているなど一時的にしか解決されない場合もあります。その際は根本的なメモリ管理を行いましょう。
また、他にもJavaScriptに関連した記事を書いているので、興味のある方は↓から覗いていってください。
JavaScriptカテゴリの記事はこちら
コメント