2010-07-26 13 views
9

Java 6 18 VM에서 가비지 수집과 관련된 다양한 옵션을 살펴보고 몇 가지 포인터를 원합니다.PermGen 문제를 해결하기위한 다양한 옵션

우리는 JBoss에서 응용 프로그램을 실행하고 재배포하는 동안 악명 높은 PermGen 오류가있는 경우가 있습니다. 이 문제를 해결하거나 완화하는 가장 좋은 방법은 인터넷에서 상충되고 쓸모없는 정보가 많이 있습니다.

what I can see에서, 다음은 올바른 : 자신에

  • VM 옵션 만 연기,이 문제가 해결되지 않습니다.
  • 이 문제를 해결할 수있는 유일한 방법은 응용 프로그램 서버에서 실행되는 (거의없는) 코드 또는 응용 프로그램 서버에서 실행되는 코드 (코드 또는 타사 라이브러리)에서 코딩 오류를 수정하는 것입니다. Permgen 작성은 종종 Application Server 클래스 로더에 의해로드 된 객체에 대한 응용 프로그램 클래스 로더에 의해로드 된 객체의 참조로 인해 응용 프로그램의 클래스 로더가 가비지 수집되지 않도록합니다.

나는 두 가지 질문이로 인한했다 :

  1. 위의 올바른 있습니까?
  2. 여기에 VM 옵션 CMSClassUnloadingEnabledCMSPermGenSweepingEnabled이 들어 있습니까? 내가 볼 수있는 것에서 CMSClassUnloadingEnabled은 암시 적으로 또는 CMSPermGenSweepingEnabled을 대체합니다. 둘 중 하나가 위의 문제에 도움이됩니까?

답변

6

불행히도 대답은 다음과 같습니다

  1. 이러한 VM의 옵션은 문제를 연기한다.

기본적으로 GC는 강하게 도달 할 수있는 개체를 가비지 수집하지 않습니다. 재배포 후에 왜 그 오래된 어플리케이션 클래스 로더에 도달 할 수 있는지 알아 내야하고 누설을 수정해야합니다.

또는 프로덕션 서버의 핫 전개를 포기하거나 웹 컨테이너 (예 : JBoss)를 자주 다시 시작하십시오.

+0

프로덕션 서버에서 핫 전개를 사용 불가능으로 설정하면 +1됩니다. 실제로 저는 개발자 워크 스테이션 환경을 제외한 모든 작업을 수행하는 경향이 있습니다. –

관련 문제