Jettyを使ってjetty-run、jetty-stopとかprepare-webappとかを繰り返していると、そのうちPermanentを使い切ってOutOfMemoryErrorが発生します。
こんな感じ。
[info] Compiling 1 Scala source to /xxxxx/hello-servlet/target/scala-2.9.0.final/classes... java.lang.OutOfMemoryError: PermGen space at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) at java.util.concurrent.FutureTask.get(FutureTask.java:83) at sbt.CompletionService$$anon$1.take(CompletionService.scala:29) at sbt.Execute.next$1(Execute.scala:74) at sbt.Execute.processAll(Execute.scala:77) at sbt.Execute.runKeep(Execute.scala:57) at sbt.Execute.run(Execute.scala:51) at sbt.EvaluateTask$.runTask(EvaluteTask.scala:83) at sbt.Aggregation$$anonfun$7.apply(Aggregation.scala:85) at sbt.Aggregation$$anonfun$7.apply(Aggregation.scala:85) at sbt.EvaluateTask$.withStreams(EvaluteTask.scala:65) at sbt.Aggregation$.runTasks(Aggregation.scala:85) at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:74) at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:73) at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:63) at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:63) at sbt.Command$.process(Command.scala:91) at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:72) at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:72) at sbt.State$$anon$1.process(State.scala:54) at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:72) at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:72) at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:13) at sbt.MainLoop$.next(Main.scala:72) at sbt.MainLoop$.run(Main.scala:63) at sbt.xMain.run(Main.scala:33) at xsbt.boot.Launch$.run(Launch.scala:54) at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:43) at xsbt.boot.Launch$.launch(Launch.scala:68) at xsbt.boot.Launch$.apply(Launch.scala:14) at xsbt.boot.Boot$.runImpl(Boot.scala:24) at xsbt.boot.Boot$.main(Boot.scala:15) Error during sbt execution: java.lang.OutOfMemoryError: PermGen space
これを起こりにくくするには、以下を参考にsbtの起動スクリプトを修正します。
http://www.assembla.com/wiki/show/liftweb/Using_SBT
java -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss2M -jar `dirname $0`/sbt-launch.jar "$@"
クラスのアンロードを有効に、Permanentを拡大ってことのようで。
ところでJetty 8を使っていると、ちょっとOutOfMemoryErrorが起こりにくくなっているような気がするのですが…。