現象
ローカル開発環境だと30sで終わるテストがCircleCIだと8m30sかかっていました。
場合によっては以下の様にOOMが発生していました。
Exited with code exit status 137
CircleCI received exit code 137
原因
jestをデフォルトの設定で実行すると並列数を実行環境のCPUの50%と動的に決まるのですが、コンテナの場合だと相性が悪く、並列数が増えることでメモリ使用量が増えた結果OOMしたり、一つ一つのテストが遅くなる様です。
対応
CircleCIの場合はjest
の実行にオプションを付けて並列処理を制御する対応が必要です。
-
--maxWorkers
オプションを付与して並列実行数を制限する -
--runInBand
オプションを付与して明示的に直列処理をする
今回の場合ではコンテナのスペックがさっと把握できなかった事と--runInBand
で充分な改善が継承できたためこちらで対応しました。
私の環境のCircleCIでテストの実行時間は元々8m30sでしたが、--runInBand
をつけ直列実行にしたことで、30sに改善されました。
参考
https://doc.ebichu.cc/jest/docs/ja/cli.html
https://ishikawa-pro.hatenablog.com/entry/2020/10/19/100000