2013-07-22 3 views
2

엔터프라이즈 수준 앱용 Tomcat 실행. "Permgen out of memory"메시지를 받고 있습니다. 서비스로 Tomcat을 실행, 자바 1.6_43, 퍼 메겐 메모리 부족

윈도우 2008 R2 서버 :

난에이를 실행하고 있습니다.

다중 배포가 없습니다. 서비스가 시작되고 앱이 실행됩니다. 결국 저는 Permgen 오류가 발생합니다.

perm 파일 크기를 늘려 오류를 지연시킬 수는 있지만 실제로 문제를 해결하고 싶습니다. 공급 업체가 문제를 부인합니다. 벤더가 단순히 "Jrockit으로 잘 실행된다"고 말하면서 메모리 누수인지 나는 모른다. Ofc는 3mos와 같은 문서에 포함 시켰을 때 좋았을 것입니다. 또한 Jrockit은 퍼미 스페이스를 4GB까지 확장 할 수 있다고 제안합니다 (정확한지는 확실하지 않습니다 ...).

어쨌든, 나는 옵션 자바 1.5의 잠재적 인 수정에 대한 몇 가지 게시물을 참조

그러나, 이러한 자바 1.6에서 사용되지 것 같다 ": + CMSClassUnloadingEnabled -XX -XX + CMSPermGenSweepingEnabled"하고, 현재 사용할 수있는 유일한 GC는 "-XX : + UseG1GC"입니다. 내가 찾을 수

가장 좋은 링크는 어디서나입니다 : http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#G1Options

새로운 G1 쓰레기 수집기가 permspace가 포함 된 경우

사람이 알고 있나요? 아니면 내가 이해하지 못하는 새로운 Java6 GC 설정에서 2 또는 옵션이 누락 되었습니까?

도움을 주셨습니다.

+0

tomcat을 다시 시작하지 않고 배포를 여러 번하고 있습니까? 그렇다면 Tomcat의 버그로 인한 것 같습니다. – kosa

+0

@ Nambari이 버그에 링크 된 사람? – hexafraction

+1

@hexafraction :이 버그와 관련된 토론이 많이 있습니다. 예를 들면 다음과 같습니다. http://www.coderanch.com/t/590332/Tomcat/Java-lang-memory-exception-Pergem – kosa

답변

1

이 오류는 일반적으로 소프트웨어/설정에서 잘못된 것으로 표시되므로 permgen 공간을 늘리는 것이 아닙니다. 이 문제를 일으키는 특정 웹 응용 프로그램입니까? 더 많은 정보가 없으면 기본적인 조언 만 할 수 있습니다.

1)) 자동 배포

3 해제)라는 메모리 누수 탐지기 (톰캣 6+) Find Leaks

2를 사용하는 대신 this 당 바람둥이의 자바 클래스 경로에 JDBC 드라이버 및 로깅 소프트웨어를 이동 블로그 항목

+0

메모리 누수 감지기를 여러 번 사용했지만 누출이 발견되지 않았습니다. 응용 프로그램이 종료되면 Tomcat도 종료됩니다 (서비스가 여전히 "up"상태 임에도 불구하고). 따라서 그 시점에서 누설 여부를 확인하는 것은 불가능합니다. auto-deploy를 살펴 본다.하지만 그게 어떻게 관련이 있는지 모르겠다. 드라이버는 java 클래스 경로에 있습니다. -감사! – user2607841

0

이전 버전의 Sun Java 1.6에서는 UseConcMarkSweepGC도 설정되어있는 경우에만 옵션이 작동합니다. 이 답변을 참조하십시오 : 그것은 비록 1.6 이후 버전의 기능인지 모르겠어요

.

과거 이러한 오류/버그의 일반적인 원인은 동적 클래스 생성이었습니다. 특히 동적 프록시 또는 사용 된 측면을 생성 한 라이브러리 및 프레임 워크의 경우. Spring과 Hibernate (또는 특히 cglib 및/또는 aspectj)의 미묘한 오용은 일반적인 범인이었다. 근본적인 문제는 모든 요청에 ​​대해 새로운 동적 클래스가 생성되어 결국 permgen 공간을 소모한다는 것입니다. CMSPermGenSweepingEnabled 옵션은 일반적인 해결 방법/수정 프로그램이었습니다. 이러한 프레임 워크의 최신 버전에는 더 이상 문제가 없습니다.