복붙노트

[SCALA] 스칼라 컴파일에서 PermGen 공간 : 어떻게 java.lang.OutOfMemoryError와를 방지하기 위해?

SCALA

스칼라 컴파일에서 PermGen 공간 : 어떻게 java.lang.OutOfMemoryError와를 방지하기 위해?

내 스칼라 컴파일러의 이상한 행동을 발견했습니다. 클래스를 컴파일 할 때 종종 OutOfMemoryError가 발생합니다. 다음 오류 메시지는 다음과 같습니다

[info] Compiling 1 Scala source to /Users/gruetter/Workspaces/scala/helloscala/target/scala-2.9.0/test-classes...
java.lang.OutOfMemoryError: PermGen space
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space

그것은 단지 한 동안 한 번 발생하고 오류는 일반적으로 다음 컴파일 실행에 던져되지 않습니다. 나는 스칼라 2.9.0 사용하고 SBT를 통해 컴파일합니다.

사람이 오류의 원인이 될 수있는 사항에 대한 단서가 있습니까? 당신의 통찰력에 미리 감사드립니다.

해결법

  1. ==============================

    1.OutOfMemoryError를위한 원인 : SBT에를 MaxPermSize = 256M (또는 공간의 다른 양) 인수 : PermGen 공간은 당신이 오라클 JVM을 사용하는 경우, 당신은 -XX을 추가해야합니다 :) 충분히 영구 세대 공간이 없다는 것입니다 스크립트. 다른 JVM의 경우, 해당 설명서를 봐주세요.

    OutOfMemoryError를위한 원인 : SBT에를 MaxPermSize = 256M (또는 공간의 다른 양) 인수 : PermGen 공간은 당신이 오라클 JVM을 사용하는 경우, 당신은 -XX을 추가해야합니다 :) 충분히 영구 세대 공간이 없다는 것입니다 스크립트. 다른 JVM의 경우, 해당 설명서를 봐주세요.

  2. ==============================

    2.를 MaxPermSize = 256M : 나는 그것은 수출 SBT_OPTS = -XX와 ~ / .sbtconfig 파일에 넣을 수있는 SBT_OPTS 인수를 지원하는 OS X에서 SBT를 설치하는 사제를 사용합니다.

    를 MaxPermSize = 256M : 나는 그것은 수출 SBT_OPTS = -XX와 ~ / .sbtconfig 파일에 넣을 수있는 SBT_OPTS 인수를 지원하는 OS X에서 SBT를 설치하는 사제를 사용합니다.

  3. ==============================

    3.나는 당신이 0.13.6 이상 SBT 사용하는 가정. 다음과 같은 내용으로 당신의 SBT 프로젝트의 루트에 .sbtopts 파일을 만듭니다

    나는 당신이 0.13.6 이상 SBT 사용하는 가정. 다음과 같은 내용으로 당신의 SBT 프로젝트의 루트에 .sbtopts 파일을 만듭니다

    -J-Xmx4G
    -J-XX:MaxMetaspaceSize=1G
    -J-XX:MaxPermSize=1G
    -J-XX:+CMSClassUnloadingEnabled
    

    를 MaxPermSize는 그들은 permgen 또는 metaspace 소진 중 하나와 관련된 메모리 부족 오류 방지하는 것이 중요하다 자바 7에 대한 반면 MaxMetaspaceSize 자바 8입니다. 물론, 플래그 값을 적응 또는 필요한 다른 플래그를 추가하는 것이 좋습니다.

    자세한 내용과 다른 접근 방법이 블로그 게시물에서 찾을 수 있습니다.

  4. ==============================

    4.나는 메모리 크기를 변경하려고 사이트보고 10 분 동안 함께 놀았이 문제를 가지고 있었다.

    나는 메모리 크기를 변경하려고 사이트보고 10 분 동안 함께 놀았이 문제를 가지고 있었다.

    턴 아웃 내가 그것을 해결

    user-profile$ sbt
    

    그때,

    sbt-project-name 0.1> clean
    

    이것은 나를 위해 그것을 정리.

  5. ==============================

    5.그것은 SBT 다시 시작에 의해 해결 된 예외를 타격하기 전에 프로그램의 컴파일 및 실행을 성공적으로 3-5에 대한 시간 내 경우처럼 나를 위해 SBT에서 메모리 누수 것 같습니다.

    그것은 SBT 다시 시작에 의해 해결 된 예외를 타격하기 전에 프로그램의 컴파일 및 실행을 성공적으로 3-5에 대한 시간 내 경우처럼 나를 위해 SBT에서 메모리 누수 것 같습니다.

    알렉세이 로마노프가 제안 또는 도움이된다면 정기적으로 SBT를 다시 시작하기로를 MaxPermSize = JVM 매개 변수 : 가장 적절한 해결책은 참으로 -XX 것 같다.

    자바 8. AFAIK하려고 전환이 더 이상 PermGen를 사용하지 않으며이 예외에 아마 이런 식으로 면역 :하지만 거기에 또 다른 흥미로운 방법입니다.

    나는 아직도 SBT 작성자는 향후 버전에서이 문제를 해결하기를 바랍니다.

  6. ==============================

    6.나는 플러그인 SBT 젠킨스 건물과 같은 문제가 있었다입니다. 그들은 젠킨스 작업 설정의 JVM 플래그에 SBT 파일에서 SBT_OPTS을 복사 한 후 해결이되었습니다.

    나는 플러그인 SBT 젠킨스 건물과 같은 문제가 있었다입니다. 그들은 젠킨스 작업 설정의 JVM 플래그에 SBT 파일에서 SBT_OPTS을 복사 한 후 해결이되었습니다.

  7. ==============================

    7.원래 명령 등을 사용하여 :

    원래 명령 등을 사용하여 :

    java -jar /path/to/sbt-launch.jar test
    

    내가 -XX를 사용하여 해결 PermGen 공간 : 내가 먼저 OutOfMemoryError가있어를 MaxPermSize를하고 OutOfMemoryError가 : 자바 힙 공간이있는에 -Xmx는 구제이었다.

    그래서 내 경우에는,이 같은 명령했다 :

    java -XX:MaxPermSize=256M -Xmx2048M -jar /path/to/sbt-launch.jar test
    
  8. ==============================

    8.sbt.sh 파일과 그 작업을 잘 저장 코드 블록 다음으로 변경합니다.

    sbt.sh 파일과 그 작업을 잘 저장 코드 블록 다음으로 변경합니다.

    get_mem_opts () {
      local mem=${1:-1536}
      local perm=$(( $mem / 4 ))
      (( $perm > 256 )) || perm=1024 //256 to 1024
      (( $perm < 1024 )) || perm=2048 // 1024 to 2048
      local codecache=$(( $perm / 2 ))
    
      echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m"
    }
    

    또는

    단말기 사용하여 구성 SBT 내보내는

    export SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:PermSize=1024M -XX:MaxPermSize=2048M"
    
  9. from https://stackoverflow.com/questions/8331135/how-to-prevent-java-lang-outofmemoryerror-permgen-space-at-scala-compilation by cc-by-sa and MIT license