Има ли някакъв начин да се предотврати изтичането на Grails permgen при повторно разполагане в производствен режим на tomcat въпреки JVM флаговете

Това е познат стар проблем, но наистина искам да го сложа в леглото веднъж завинаги! Имам зададени следните JVM флагове:

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

но все още наблюдавам увеличение на използването на permgen с добри 50 MB за всеки цикъл на внедряване. Внедрявам дистанционно с помощта на приложението за управление на Tomcat и Grails е в производствен режим.

Ако стане твърде пълно, тогава е необходимо kill -9!

Може да опитам да използвам JRockit, но нито сега това не е опция. Наистина не намирам за приемливо в производствена среда от време на време да трябва да отскачам целия контейнер.


person barrymac    schedule 25.11.2011    source източник


Отговори (2)


Изтичането на Permgen е проблем, без значение на кой сървър за приложения сте, когато използвате grails, е моят опит (много личен и вероятно лесно оспорим анекдот, само за да е ясно по въпроса ;) ).

Ако това е единственото приложение, което сте внедрили, защо не просто shutdown.sh, да изтриете папката webapp, да поставите war и след това startup.sh?

Това е начинът, по който вървим и пренасочването печели само около 7 секунди (където 5 от тях са sleep 5, за да се гарантира, че catalina е напълно изключена, преди да се върне обратно).

Редактиране:

Да имаш един екземпляр на tomcat за приложение е доста готино според мен!

person Oliver Tynes    schedule 25.11.2011
comment
Бих заменил "grails" с "tomcat" :) - person prusswan; 26.11.2011
comment
Е, дори и с 2gb permgen, раздадени на glassfish, в крайна сметка ще ни свърши permgen пространството. Освен това наличието на „tomcat“ на сървър за приложения е безсмислено;) - person Oliver Tynes; 26.11.2011
comment
glassfish е още по-лош нарушител imho :) - person prusswan; 26.11.2011
comment
Звучи така, сякаш въпросът трябва да бъде кой сървър на приложения никога не изпуска permgen! - person barrymac; 28.11.2011
comment
Тогава нямаше да мога да напиша отговор :P - person Oliver Tynes; 28.11.2011

Може да не сте наясно с това, но permgem ще се появи в крайна сметка, докато многократно извършвате горещо внедряване в екземпляра Tomcat, тъй като има някои класове, които никога не могат да бъдат правилно разтоварени (или поради начина, по който са програмирани класовете, или поради някакво ограничение от страна на Tomcat) без значение кои параметри използвате, освен рестартиране.

person prusswan    schedule 25.11.2011