CircleCI上でgradleでテストを走らせていると,プロセスが突然死してテストがコケるという事態に見舞われていました.
運が悪いと10連続でfailしたりするなどかなり厳しい状況だったのでCircleCI Supportに泣きついたところ,
- 症状としてはOOMで死んでるっぽい (なぜかOOM debug logは出ていなかった)
- gradleは環境変数
JVM_OPTS
を尊重しない - 一方で
_JAVA_OPTIONS
環境変数は優先するので,制限をかけたいときはこれを使うと良い
という術を教えてもらったので,それに従ったところテストが完全に安定しました.
diffとしてはたったのこれだけ!
@@ -7,7 +7,7 @@ working_directory: ~/repo environment: - JVM_OPTS: "-Xms2048m -Xmx2048m" + _JAVA_OPTIONS: "-Xms2048m -Xmx2048m" TERM: dumb steps:
事象としてはgradleは JVM_OPTS
を尊重しないため,JVM_OPTS
にいくらヒープ容量の制限を書いてもそれが反映されず,結果的にgradleがメモリを無尽蔵のバカ食いして死んでしまったということのようです.
_JAVA_OPTIONS
はJVMに直接的にパラメータを食わせることができるので,それを用いるとgradleにもヒープ容量の制限を強く課すことができるようです.
本件についてはCircleCIのこのブログが詳しくて良いです: How to Handle Java OOM Errors - CircleCI
しかし効く環境変数と効かない環境変数があるのはなかなか難しいですね……