Po kilku dniach debugowania udało mi się przeprowadzić aplikację sieciową średniej wielkości i bardzo dużej na serwerze Tomcat 6.0.32 bez żadnych wycieków PermGen
. Po wypełnieniu zobaczyłem spadek PermGen
, a programy ładujące klasy zostały zebrane.Rozwiązywanie problemu z PermGenem przy redeploy z Jetty 7
Po wielu radości próbowałem dokonać ponownej implementacji aplikacji bez wycieków w naszym środowisku programistycznym, które składa się z Mavena i wtyczki Jetty.
Niestety wydaje się, że trafienie ograniczenie serwera, jak pokazano na poniższym zrzucie ekranu
Yourkit snapshot http://img811.imageshack.us/img811/7320/jettyclassloaderbeanelr.png
Jetty żądania nici mają silne odniesienie do BeanElResolver
co z kolei ma silne odniesienie do wielu klas z moja aplikacja internetowa.
Nie znalazłem żadnego odniesienia, jak opróżnić tę informację.
Jak mogę usunąć ten ostatni wyciek PermGen
z mojej aplikacji?
Aktualizacja:
Zrobiłem następujące czynności, aby rozwiązać ten problem, bez powodzenia:
- zaktualizowany do najnowszej wersji Jetty Plugin (zarówno 7.4.5 i 8.0 .0.M3)
- używany kolektor CMS:
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
Aktualizacja 2:
- Ja zgłosiłem to jako błąd w tej sprawie trackera pomost: maven-jetty-plugin: PermGen leak due to javax.el.BeanELResolver
Nie rozumiem twojego sformułowania. Co masz na myśli mówiąc o PermGen-Leak? Czy próbowałeś przekazać flagom GC związane z GC takie jak: -XX: + CMSPermGenSweepingEnabled -XX: + CMSClassUnloadingEnabled? Czy spodziewasz się, że uruchomiona aplikacja internetowa zostanie całkowicie pobrana, gdy połączenie nie zostanie nawiązane? –
Anioł: domyślnie twój kontener serwletu przecieka programy ładujące klasy na każdym ponownym wdrożeniu. Definicje klas są przydzielane z generacji permanentnej, więc otrzymasz przeciek PermGen. Jestem pod wrażeniem, że OP zdołał ominąć ten problem z Tomcat 6 i bez flag. –
Robert: proszę, powiedz nam więcej o tym, co zrobiłeś, aby naprawić wyciek w Tomcat 6! Chciałbym wiedzieć, co zrobiłeś. Może Wiki? –