その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

CircleCIでgradleのテストを走らせているとプロセスが突然死するんですけどって時

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_OPTIONSJVMに直接的にパラメータを食わせることができるので,それを用いるとgradleにもヒープ容量の制限を強く課すことができるようです.

本件についてはCircleCIのこのブログが詳しくて良いです: How to Handle Java OOM Errors - CircleCI
しかし効く環境変数と効かない環境変数があるのはなかなか難しいですね……