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

suzuki

この記事は 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 にスレッド形式でログを残すようにしています。
ハマっている時間や参照したドキュメント、試したコマンドなどが分かるので結構いいです!

Gaji-Laboでは、React+Reduxが得意なフロントエンドエンジニアを募集しています

弊社ではフロントエンドのエンジニアさんを随時募集しています。現在は特にReact+Reduxの設計・実装に強いフロントエンドエンジニアさんを求めています! 大きな会社や事業会社とはひと味もふた味も違うGaji-Laboを味わいに来ませんか?

もちろん、一緒にお仕事をしてくださるフリーランスの方やパートナーさんも随時募集中です。まずはお気軽に声をかけてください。お仕事お問い合わせや採用への応募、共に大歓迎です!

求人応募してみる!


suzuki

投稿者 suzuki

HTML/CSS のマークアップから始まり、現在は React や TypeScript を使ったコンポーネント実装をすることが多いです。

淡々と実装するだけではなくコミュニケーションを取りながら、チームとしてプロジェクトを前に進めることを意識しています。

最近は会社の成長へのコミットに関心があり、組織・チーム全体で強まるためにはどうするのだろう?ということを考えています。