[小ネタ]Vitest(coverage)で「JavaScript heap out of memory」がでたときの対処方法
2024.05.13
どうも!オペレーション部の西村祐二です。
最近、Vitestに入門しています。
PCに積んでるメモリが少ないわけでもないのに、メモリに関連する「JavaScript heap out of memory」エラーに遭遇しました。
<--- Last few GCs ---> [84933:0x138008000] 58702 ms: Scavenge 4093.3 (4103.9) -> 4092.5 (4104.4) MB, 0.75 / 0.00 ms (average mu = 0.209, current mu = 0.198) allocation failure; [84933:0x138008000] 58718 ms: Scavenge (reduce) 4093.7 (4104.4) -> 4093.0 (4102.9) MB, 1.00 / 0.00 ms (average mu = 0.209, current mu = 0.198) allocation failure; <--- JS stacktrace ---> FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory ----- Native stack trace ----- ... ... ...
備忘録を兼ねて解決策をブログにしておきます。
環境
- PC: M2 Max
- メモリ: 32GB
- vitest: 1.6.0
解決策
はじめに結論として、coverageの設定に対象とするディレクトリを指定することで解消しました。
import tsconfigPaths from "vite-tsconfig-paths"; import { defineConfig } from "vitest/config"; export default defineConfig({ plugins: [tsconfigPaths()], test: { pool: "forks", reporters: ["verbose"], coverage: { include: ["src/**/*.ts"], enabled: true, reporter: ["text", "lcov", "html"], }, }, });
原因
私の環境ではvitestのcoverageを有効にしておりました。
同階層にAWS CDKのcdk.out
もあり、不要なコードを読み込みにいってるのが原因のようでした。
includeの設定がデフォルトでは['**']
となっているのを、正しいpathを指定することで解消しました。
https://vitest.dev/config/#coverage-include
ちなみにexclude
はデフォルトで下記設定になっているようでした。こちらをカスタマイズすることでも解消できそうです。
https://vitest.dev/config/#coverage-exclude
さいごに
Vitestで「JavaScript heap out of memory」がでたときの対処方法を備忘録かねてまとめました。
誰かの参考になれば幸いです。