2011-11-25 3 views
4

익숙한 오래된 문제이지만 정말 잠자리에 들고 싶습니다!JVM 플래그에도 불구하고 Tomcat의 프로덕션 모드에서 재배포시 Grails permgen이 누출되는 것을 막을 수있는 방법이 있습니까?

-XX : + CMSClassUnloadingEnabled -XX : + CMSPermGenSweepingEnabled -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES =

진정한하지만 난 아직 발견했을 permgen 사용을 나는 다음과 같은 JVM 플래그 설정있어 매번 배포 할 때마다 좋은 50Mb까지 올라가십시오. 나는 Tomcat 관리자 응용 프로그램을 사용하여 원격으로 배포하고 있으며 grails는 프로덕션 모드입니다.

너무 많으면 kill -9가 필요합니다!

나는 Jrockit을 사용해 볼 수도 있지만 지금은 옵션이 아닙니다. 프로덕션 환경에서 매번 컨테이너 전체를 바운스 할 수있는 것은 용납 할 수 없습니다.

답변

2

grails를 사용할 때 어떤 응용 프로그램을 사용하든 상관없이 퍼 겐의 누설은 내 경험입니다. (매우 개인적이고 쉽게 논할 수있는 일화로 분명히 알 수 있습니다.)).

배포 한 유일한 응용 프로그램 인 경우 shutdown.sh, webapp 폴더 삭제, war 및 startup.sh의 배포는 왜 필요합니까?

이것은 우리가가는 길이며 재배포는 약 7 초 만에 얻을 수 있습니다 (이 중 5 개는 카탈리나가 다시 가동되기 전에 카탈리나가 완전히 종료되도록하기 위해 sleep 5입니다).

편집 :

앱마다 하나 개의 톰캣 인스턴스를 갖는 내 의견으로는 어쨌든 꽤 멋지다!

+0

'grails'를 'tomcat'으로 바꿀 것입니다. :) – prusswan

+0

글래스 피시에게 넘겨 준 2 기가 바이트의 permgen을 사용하더라도 궁극적으로 permgen 공간이 부족합니다. 또한, 애플 리케이션 서버에 '바람둥이'가 비관적입니다;) –

+0

글래스 피쉬는 더욱 악의적 인 공격자입니다. – prusswan

1

당신은 이것을 인식하지 못할 수도 있지만, 언젠가 제대로 언로드 될 수없는 클래스들이 있기 때문에 (예를 들어, 클래스가 프로그래밍 된 방식으로 인해) , 또는 Tomcat의 일부 제한) 어떤 매개 변수를 사용하든 관계없이 재시작이 필요합니다.

관련 문제