かまたま日記3

プログラミングメイン、たまに日常

CircleCIでgradle testがOOMで落ちるのを防ぐ

とあるプライベートなリポジトリで急にCircleCI上のgradleのテストが落ちるようになってしまい、レポートのxmlも出力されなくなってしまいました。

その時のログの一部

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"
}

これで落ちずにテストを完遂できました。