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では、JavaScriptフレームワーク経験が豊富なパートナーさんを募集しています

Gaji-Laboでは、開発チームの一員としてプロジェクトに一緒に取り組んでくれる業務委託のパートナーさんを募集しています。

現在は特にJavaScriptフレームワーク実践と業務経験が豊富なWebフロントエンドエンジニアを必要としています。React + TypeScript、Vue.js、Next.js、Nuxt.js など、あなたの得意なフレームワークを教えて下さい!

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

お問い合わせしてみる!


suzuki

投稿者 suzuki

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

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

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