CircleCIでgradle testがOOMで落ちるのを防ぐ
とあるプライベートなリポジトリで急にCircleCI上のgradleのテストが落ちるようになってしまい、レポートのxmlも出力されなくなってしまいました。
うーん、CirclrCIでテストに失敗したんだけど例外のログが何も出ない、その上なぜかJUnitのレポートも作成されないしローカルでは成功する…原因が判らん…
— かまたま (@kamatama_41) July 13, 2018
その時のログの一部
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > Process 'Gradle Test Executor 1' finished with non-zero exit value 137 * Try: Run with --debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':test'.
テストのプロセスが exit value 137
で落ちているとのこと。調べてみるとOOMっぽい感じです。
Exit code 137 - Out of memory – CircleCI Support Center
確かに、今回テストの数をParametarizedを使って倍に増やしたので、それが原因っぽいです。
Gradle自体はこちらによるとデフォルトでは1024MBヒープサイズを確保するようなのですが、 test
タスクはビルドプロセスとは別のJVMを使うようになっており、そこにはこの制限が適用されないようです。そこで test
タスクのmaxHeapSizeを使って最大値をCircleCIのデフォルト(4GB)を超えないよう調整します。
参考:
Testing in Java & JVM projects - Gradle User Manual
Test - Gradle DSL Version 4.8.1
test { // Not to exceed the limit of CircleCI (4GB) maxHeapSize = "3g" }
これで落ちずにテストを完遂できました。