$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

sbtでjava.lang.OutOfMemoryError: Metaspaceで死んだ時は

自分用の雑なメモ。正確性は不明。

原因

sbt -helpしてみると、sbtは-memのデフォルトが以下のように設定されている。

-mem    <integer>  set memory options (default: 1024, which is -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxMetaspaceSize=256m)

ので、プロジェクトが大きくなってきてデフォルトの256mを超えるだけMetaspaceを使うと、死んでしまう様子。

対処

対応としては

  • 1. sbtの起動時にsbt -memオプション付きで起動する
  • 2. globalなsbtoptsに-memオプションを記述しておく
  • 3. プロジェクトルートに.sbtoptsファイルを置いて、そこで設定する

などの手がありそう。1や2の方法だと同じチームの人も困るだろうし、3の方法で設定するのが良さそうだ。

例えばこんな感じで.sbtoptsは設定しておくと良さそう。

.sbtopts

-J-Xms1024m
-J-Xmx4096m
-J-XX:ReservedCodeCacheSize=512m
-J-XX:MaxMetaspaceSize=1024m