2013-05-20 9 views
7

일부 코드를 테스트하기 위해 SBT 0.12.3을 사용하고 있는데, 종종 ~test 명령을 사용하여 대화식으로 테스트하는 동안이 오류 메시지가 나타납니다. 시험의 상호 작용에 (내가 얼마나 많은 모르는)SBT의 메모리가 부족합니다.

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 

이 오류는 분명하다, 나는 힙 크기를 증가 클라우드 그것은 그 오류를 던지는 중지 할 수 있지만, 점은 숫자 후 종료 것입니다 코드가 최소한으로 변경되고 힙이 단순하게 증가하면 문제가 해결되는지, 아니면 메모리가 부족하지 않도록 추가 작업을해야하는지 등이 포함됩니다.

미리 감사드립니다.

답변

5

아직 사용하지 않았다면 sbt.bat에 더 많은 PermGen 공간을 제공하십시오. Windows에서 sbt를 실행하지 않지만 java -Xmx1512M -XX:MaxPermSize=512M을 제공합니다. 시도 할 또 다른 사항은 테스트 중에 포크 할 수 있습니다. http://www.scala-sbt.org/release/docs/Detailed-Topics/Testing#forking-tests

버전 0.12.0에서는 별도의 JVM에서 테스트를 실행하는 기능이 추가되었습니다. 상기 설정

fork in Test := true 

모든 테스트는 단일 외부 JVM에서 실행되도록 지정한다.

관련 문제