Skip to content

Instantly share code, notes, and snippets.

@kkismd
Created June 12, 2015 10:41
Show Gist options
  • Save kkismd/58bfe83d28268fe8d4d0 to your computer and use it in GitHub Desktop.
Save kkismd/58bfe83d28268fe8d4d0 to your computer and use it in GitHub Desktop.
stb testのリークとフォーク
kkismd 31 minutes前
コードを直しながらsbt shellの中でtestを繰り返し実行していると、そのうち
java.lang.OutOfMemoryError: PermGen space
が出て落ちることが多いのですが、これはクラスローダーまわりになにかリークが起こってるんでしょうか?
xuwei-k 30 minutes前
はい
(もしメモリの設定を変えてなかったら)設定を増やしましょう
あとは、コンパイルじゃなくtestのほうが原因なら、testは必ずforkして実行するとか
ClassLoaderリークするから、一定時間ごとに裏で強制GCしてみようぜ、的な話(つらい sbt/sbt#1773 sbt/sbt#1223
Saisse 26 minutes前
あんまり直す気はなんですかね?
kkismd 24 minutes前
メモリの設定でちょっと増やしてみて、あまり変わらなかったので質問してみました
-XX:MaxPermSize=1024M
xuwei-k 21 minutes前
直そうとしても根本的に難しすぎて苦戦してる感じじゃないんですかね?
testのforkは設定してます?あとJava7と8によっても違うので
kkismd 17 minutes前
fork in Test := true としたら
[error] Could not create an instance of services.xxxx.XxxxxSpec
[error] caused by java.lang.Exception: Could not instantiate class services.xxxx.XxxxxSpec: null
[error] org.specs2.reflect.Classes$class.tryToCreateObjectEither(Classes.scala:93)
なにがまずいんだろう
xuwei-k 14 minutes前
テストclass内のトップレベルで -D のJVMの変数を読み込むようなコード書いてて、XxxxSpecのインスタンス生成時に読み込めずnullになって失敗?(forkすると、設定変えないと -D の変数は読み込めなくなる)
kkismd 9 minutes前
あー、たぶんどこかで設定値を読み込んでます。
値の取り込みかたを全体的に見直した方がいいのかもしれないですね。
xuwei-k 5 minutes前
別に全体的に変えなくても、とりあえずそのまま動かしたいなら、sbtのビルドファイル上で javaOptions in Test を設定すればいいので
kkismd 4 minutes前
なるほどです
xuwei-k 4 minutes前
そこに適当に設定するか scala.sys.process.javaVmArguments あたりから、そのまま全部引き渡す or 必要な物だけ引き渡す、などをすれば
いずれにせよ、メモリの設定を javaOptions in Test のほうにもやらないとかなり簡単に死ぬので設定したほうがいいです
kkismd a few seconds前
ありがとうございます。いろいろ分かってなかったことが教えてもらって理解できました。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment