JavaScript heap out of memory が発生したときに試したこと


この記事は Gaji-Labo Advent Calendar 2019 17日目の記事です。

おはようございます。Gaji-Labo 鈴木です。
今回は、開発中に yarn test を実行したら JavaScript heap out of memory が発生し、少しハマったので解決方法をメモしておきます。

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

試したこと

  • エラーメッセージでググり解決策を探す
  • node --max-old-space-size=4096 yarn test などのコマンドを複数試す
  • 一応ブランチ変えてメインブランチで試す(が、変化なし)

解決方法

slack で「テスト回せないよー」とぼやいていたら @neotag が以下のコメントをくれました。

neotag [12:54 PM]
.zshrc とかに NODE_OPTIONS 指定してターミナル起動しなおすとどうですか?
export NODE_OPTIONS="--max-old-space-size=2048"
max-old-space-size はよしなに多めにしてもらって。

試してみると、無事テストが回せた!
max-old-space-size を 2048 から 1024 に変更して再度試しても問題なくテストが回せたので一旦1024にしておきました。

また、 .zshrc で指定せずに以下の方法でもよさそうです。

$ NODE_OPTIONS="--max-old-space-size=1024" yarn test

うまくいかなかった原因

node --max-old-space-size=4096 yarn test

これで解決できなかったのは node 宛に引き渡した option が yarn に渡ってなかったからです。
yarn test を叩いて、実際に実行されるコマンドは jest でした。
そこを見落としていたので、 option は渡したつもりでいるし、なのに何も変わらない。。状態になっていました。
option 指定がうまくいかない時は、 その指定が本当に必要なところに届いているか を確認すると、少し早く解決できそう!という学びを得ました。

(余談ですが)

今回は「手元で yarn test が実行できない」でしたが、それ以外にもなにかでハマりそうな時は slcak にスレッド形式でログを残すようにしています。
ハマっている時間や参照したドキュメント、試したコマンドなどが分かるので結構いいです!

今すぐの転職でなくてもOKです!まずはお話しませんか?

現在弊社では一緒にお仕事をしてくださるエンジニアさんやデザイナーさんを積極募集しています。まずはカジュアルな面談で、お互いに大事にしていることをお話できたらうれしいです。詳しい応募要項は以下からチェックしてください。

パートナー契約へのお問い合わせもお仕事へのお問い合わせも、どちらもいつでも大歓迎です。まずはオンラインでの面談でお話しましょう。ぜひお気軽にお問い合わせください!

話をしてみたい!

投稿者 Gaji-Labo Staff

Gaji-Laboの社内デジタル環境でいろいろなお手伝いをしているがじ専務&じら常務。みんなのシリーズ記事をまとめたり、卒業したスタッフの過去記事を記録したり、Twitterをやったりしています。