LoginSignup
24
24

More than 5 years have passed since last update.

CircleCI で Playframework のプロジェクトを回そうとしたら OOM Killer に殺される件

Last updated at Posted at 2015-01-31

process が肥大化して落ちる

CircleCI で Scala のプロジェクトを sbt test しようとしたところ、コンテナで4GB以上使ったので異常終了したよ、とのエラーメッセージが出た。ssh login を有効にして様子を眺めていたところ、ひとつ目の java process が 1.7GB 程度まで大きくなった後、2つめの java process が出来上がり同じくらいまで大きくなっていった様子が確認できた。他に起動しているプロセスと合わせると4GBを超えていそうだ。

Playframework だとテストを fork した java process で実行することをすっかり忘れていた。

解決するにはそれぞれの java process が使うメモリ量を指示すれば良い。入っている sbt.sbtopts を見てくれるやつなので、 circle.yml に次のように書いてやれば良い。

dependencies:
  pre:
    - echo '-mem 800' >> .sbtopts

これでヒープに 800MB, PermGen に数百MB(忘れた)割り当てられるので 2 process 起動しても溢れない。少なくとも自分の環境では溢れなかった。あふれるようだったらもう少し調整すれば良い。

その他のはまりポイント

update-java-alternatives

自分のプロジェクトでは Java 7 syntax のコードが含まれており、そのままだと document 生成まわりで落ちた。sudo update-java-alternatives -s java-1.7.0-openjdk-amd64 すると落ちなくなった。

play コマンドを実行しようとして落ちる

そのままだと使っているバージョンと異なるバージョンの play コマンドで実行しようとして落ちた。
sbt を使うようにすれば良い。

dependencies:
  override:
    - sbt update
test:
  override:
    - sbt test

~/.sbt をキャッシュする

~/.ivy2 はデフォルトでキャッシュされるので良いが、 ~/.sbt はされない。
circle.yml に次のように書く。

dependencies:
  cache_directories:
    - "~/.sbt"

git submodule

デフォルトでは submodule 取ってこないので circle.yml に次のようにかけば良い。

checkout:
  post:
    - git submodule sync
    - git submodule update --init

CircleCI の感想

  • Private repository も無料で動かせるなんてスゴイ! いままで Drone.io の open source 版を動かしてたけど移行しようかな。
  • CI のフェーズが整理されておりすんなり理解できた。
  • うまくいかない時は SSH ログインしてチェックすることができるので、すばやく問題を解決することができた。Travis にはない強みだ。
24
24
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24