2013-05-20 17 views
7

Używam SBT 0.12.3 do przetestowania kodu i często otrzymuję ten komunikat o błędzie podczas interaktywnego testowania za pomocą polecenia ~test.SBT zabrakło pamięci

8. Waiting for source changes... (press enter to interrupt) 
[info] Compiling 1 Scala source to C:\Users\t\scala-projects\scala test\target\s 
cala-2.10\classes... 
sbt appears to be exiting abnormally. 
    The log file for this session is at C:\Users\t\AppData\Local\Temp\sbt566325905 
3150896045.log 
java.lang.OutOfMemoryError: PermGen space 
     at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source) 
     at java.util.concurrent.FutureTask.get(Unknown Source) 
     at sbt.ConcurrentRestrictions$$anon$4.take(ConcurrentRestrictions.scala: 
196) 
     at sbt.Execute.next$1(Execute.scala:85) 
     at sbt.Execute.processAll(Execute.scala:88) 
     at sbt.Execute.runKeep(Execute.scala:68) 
     at sbt.EvaluateTask$.run$1(EvaluateTask.scala:162) 
     at sbt.EvaluateTask$.runTask(EvaluateTask.scala:177) 
     at sbt.Aggregation$$anonfun$4.apply(Aggregation.scala:46) 
     at sbt.Aggregation$$anonfun$4.apply(Aggregation.scala:44) 
     at sbt.EvaluateTask$.withStreams(EvaluateTask.scala:137) 
     at sbt.Aggregation$.runTasksWithResult(Aggregation.scala:44) 
     at sbt.Aggregation$.runTasks(Aggregation.scala:59) 
     at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:31) 
     at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:30) 
     at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.sca 
la:62) 
     at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.sca 
la:62) 
     at sbt.Command$.process(Command.scala:90) 
     at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(MainLoop.scala:71 
) 
     at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(MainLoop.scala:71 
) 
     at sbt.State$$anon$2.process(State.scala:170) 
     at sbt.MainLoop$$anonfun$next$1.apply(MainLoop.scala:71) 
     at sbt.MainLoop$$anonfun$next$1.apply(MainLoop.scala:71) 
     at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) 
     at sbt.MainLoop$.next(MainLoop.scala:71) 
     at sbt.MainLoop$.run(MainLoop.scala:64) 
     at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:53) 
     at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:50) 
     at sbt.Using.apply(Using.scala:25) 
     at sbt.MainLoop$.runWithNewLog(MainLoop.scala:50) 
     at sbt.MainLoop$.runAndClearLast(MainLoop.scala:33) 
     at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:17) 
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space 

Błąd jest jasne, że chmura zwiększyć rozmiar sterty i może przestać rzucać tego błędu, ale jest to, że wyłącza się po kilku (nie wiem ile) interakcji z testów minimalna zmiana w kodzie, a jeśli prosty wzrost sterty rozwiąże problem lub będę musiał wykonać dodatkową pracę, aby nie zabrakło pamięci.

Z góry dziękuję.

Odpowiedz

5

Jeśli nie, spróbuj podać więcej miejsca PermGen w pliku sbt.bat. Nie uruchamiam sbt w Windows, ale daję java -Xmx1512M -XX:MaxPermSize=512M. Inną rzeczą, którą należy wypróbować, może być rozwidlenie podczas testowania: http://www.scala-sbt.org/release/docs/Detailed-Topics/Testing#forking-tests

W wersji 0.12.0 dodano opcję uruchamiania testów w oddzielnej maszynie JVM. Zachodzące

fork in Test := true 

określa, że ​​wszystkie testy będą wykonywane w jednym JVM zewnętrznego.