최고의 PermGen 처리 기능을 갖춘 무료 JVM 구현은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1009042

  •  06-07-2019
  •  | 
  •  

문제

저는 Sun의 JRE6에서 Tomcat6을 실행하고 있으며 배포할 때마다 OutOfMemoryException이 발생합니다.PermGen.저는 PermGen 솔루션에 대한 인터넷 검색을 수행하고 많은 수정 사항을 시도했습니다.작동하지 않습니다.저는 Oracle의 JRockit과 PermGen 할당의 크기가 어떻게 기가바이트일 수 있는지(Sun의 128M에 비해)에 대한 많은 좋은 내용을 읽었으며 문제가 해결되지는 않지만 2와 비교하여 PermGen 예외 간에 100배 재배포할 수 있습니다. 지금은 몇 번이나.

JRockit의 문제점은 프로덕션 환경에서 이를 사용하려면 수천 달러의 비용이 드는 WebLogic을 구입해야 한다는 것입니다.PermGen 확장을 더 관대하게 해주는 다른 (무료) 옵션은 무엇입니까?아래 JVM은 이 영역에서 어떻게 작동합니까?

  • IBM JVM
  • JDK 열기
  • 블랙다운
  • 카페

...다른 사람들?

업데이트: 어떤 사람들은 PermGen max가 128M이라고 생각하는 이유를 묻습니다.그 이유는 128M 이상으로 높이려고 할 때마다 JVM이 초기화되지 않기 때문입니다.

[2009-06-18 01:39:44] [info] Error occurred during initialization of VM [2009-06-18 01:39:44] [info] Could not reserve enough space for object heap [2009-06-18 01:39:44] [395 javajni.c] [error] CreateJavaVM Failed

개체를 위한 공간을 예약하는 데 실패하는 것이 이상합니다. 더미, "a" 힙이 아닌 "the" 힙인지는 확실하지 않습니다.

초기 1024MB, 최대 힙 1536MB로 JVM을 부팅합니다.

답변이 되었으므로 이 질문을 닫겠습니다."전환은 쓸모가 없습니다"라고 대신 물어보세요 PermGen 설정이 더 크면 Sun JVM이 실패하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

나는 당신이 Permgen 크기를 늘릴 수 있다는 점에서 Michael Borgwardt에 동의합니다. 주로 메모리 누출로 인한 것이라고 동의하지 않습니다. Permgen Space는 반사를 많이 사용하는 응용 분야에 의해 적극적으로 먹습니다. 따라서 기본적으로 Tomcat에서 스프링/최대 세분 애플리케이션이 실행중인 경우 해당 페름기 공간을 많이 부딪 칠 준비를하십시오.

다른 팁

Sun의 JVM이 128m Permgen으로 제한된다는 생각은 무엇입니까? -xx : maxpermsize 명령 줄 옵션으로 자유롭게 설정할 수 있습니다. 기본값은 64m입니다.

그러나 문제의 실제 원인은 응용 프로그램에서 메모리 누출 일 것입니다. 이들은 특히 클래스 로더가 참여할 때 매우 미묘 할 수 있습니다. 왜냐하면 모든 클래스에 대한 단일 참조이기 때문입니다. 이 기사 문제를 자세히 설명하고 이 하나 그것을 고치는 방법을 제안합니다.

기술적으로 "Permgen"메모리 풀은 Sun JVM입니다. 다른 JVM은 그것을 부르지 않지만 모두 하나 이상의 비가 비 이식 메모리 풀에 대한 아이디어를 가지고 있습니다.

그러나 Sun JVM에서 Permgen에 문제가있는 경우 다른 JVM으로 이동하는 것은 아무것도 해결할 것 같지 않습니다. 다른 이름으로 나타납니다.

여러 재배치로 인해 문제가 발생하면 VM의 Permgen을 큰 값으로 높이십시오. 우리는이 문제로 인해 잠시 jrockit을 시도했으며 동일한 재배치 피로로 고통받습니다. 우리는 Sun JVM으로 돌아 왔습니다.

JVM을 바꾸는 것은 만병 통치약이 아닙니다. 새로운 예상치 못한 문제를 얻을 수 있습니다 (예 : 참조 기사 4 개의 다른 JVM에서 응용 프로그램을 시작하는 정보).

  • 대부분 재배치에서 발생하는 클래스 누출 (예 : 클래스 로더를 통해)을 가질 수 있습니다. 솔직히, 나는 Tomcat에서 뜨거운 재배치를하는 것을 본 적이 없다 (하루를 보길 희망).
  • 잘못된 JVM 매개 변수를 가질 수 있습니다. 상황이 해결 될 것입니다. 재미 있지만, 나는 위에서 언급 한 적이없는 Sun JDK 6 32 비트)를 만난 적이 없습니다. 링크 "생산 배치를위한 JVM 쓰레기 수집 조정"기사에.
  • Permgen 청크는 클래스 및 관련 정보를로드하기에 충분하지 않을 수 있습니다 (실제로 Tomcat에서 재개 후에는 대부분 발생하는 경우에 구식 클래스가 메모리에 머무르고 새로운 것들이로드되고 있습니다)

내 과거의 경험에서, 그런 종류의 누출을 디버깅하는 것은 내가 가진 가장 까다로운 디버깅 중 하나입니다.

업데이트

유용한 기사 애플리케이션에서 클래스 로더 링크를 제거하는 방법은 재생됩니다.

Jrockit을 사용하고 메모리를 통해 (-xx : maxpermsize를 통해) 부딪치지 않으면 여전히 Permgen 오류가 발생합니다. 나는 또한 이것을 얻는 것을 피하기 위해 아무것도 얻을 수 없습니다 (증가하는 것 외에).

Perm Gen은 아마도 가장 간단한 메모리 일 것입니다. 다양한 VM 구현 사이에 많은 차이가있을 것입니다.

프로덕션에서 끄기로 표시된 모든 Tomcat 구성이 생산에서 꺼져 있는지 확인하십시오.

그렇습니다. 많은 클래스를 생성하는 일부 프레임 워크는 파리를 생성하지만 스스로 청소해야하며 어쨌든 128MB의 몇 개 이상을 장착 할 수 있습니다.

진지하게, Perm Gen이 계속 올라가면 누출 A는 고정되어야하지만 고치는 것은 문제가되지 않을 수 있습니다.

그만큼 IBM JVM 는(그리고 2009년에도) 퍼미젠을 갖고 있지 않습니다.이에 대한 자세한 내용을 읽을 수 있습니다. 세대별 동시 가비지 수집기 이는 Java 7의 기본 GC입니다.

내가 가장 좋아하는 플러그인을 사용하면 HotSpot JVM의 permgen이 자주 채워지기 때문에 IBM JVM에서 Eclipse IDE를 실행하는 경우도 있습니다.물론, 누군가가 고쳐야 할 메모리 누수가 있었을 수도 있지만, 그러는 동안 내 IDE는 충돌하지 않았고 다른 설정을 실험하느라 바쁘지도 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top