PermGen space Problem mit Glassfish/Hibernate
Bin ich mit einem GWT+Hibernate-app auf Glassfish 3.1. Nach ein paar Stunden, die ich laufen aus der Permgen space. Dies ist ohne webapp lädt. Ich bin mit mit –XX:MaxPermSize=256m –XmX1024m
.
Nahm ich den Rat von auf dieser Seite, und fand, dass ich undicht Tonnen von Klassen - alle meine Hibernate-Modelle und alle meine GWT RequestFactory-proxies.
Den guide oben verwiesen wird, sagt Sie zu "überprüfen der Ketten, suchen Sie den zufälligen Bezug, und befestigen Sie den code". Leichter gesagt als getan.
Den classloader immer Punkte zurück zu einer Instanz von org.glassfish.web.loader.WebappClassLoader
. Sie Graben weiter, ich finde viele Referenzen von $Proxy135
und ähnlich benannte Objekte. Aber ich weiß nicht, wie sonst, durch zu Folgen.
-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m
InformationsquelleAutor George Armhold | 2011-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
neuen class-Objekte gelegt werden, in den PermGen und damit nehmen einen immer größer werdenden Teil des Raumes. Unabhängig davon, wie groß Sie machen Sie den PermGen space, wird es zwangsläufig oben nach genug Bereitstellungen. Was Sie tun müssen, ist Maßnahmen ergreifen, um die Spülung der PermGen, so dass Sie zu stabilisieren und seine Größe. Es gibt zwei JVM-flags, die sich mit dieser Reinigung:
Diese Einstellung enthält die PermGen in eine garbage collection ausgeführt werden. Standardmäßig ist der PermGen space wird nie einbezogen in die garbage collection (und damit wächst ohne Grenzen).
Diese Einstellung teilt die PermGen sweep garbage collection, Maßnahmen zu ergreifen, die auf die Objekte der Klasse. Standardmäßig, die Objekte der Klasse bekommen eine Befreiung, auch wenn der PermGen space wird besucht während einer garabage collection.
Hi, ich habe noch eine Frage, wo soll ich diese Befehle?
In Glassfish 3, Bearbeiten glassfish/domain_folder/config/domain.xml in dem tag
java-config
sollte es bereits ähnliche Konfigurationen, fügen Sie einfach neuejvm-options
ElementeInformationsquelleAutor Dead Programmer
Gibt es einige OK-tools zu helfen, aber Sie würde es nie erfahren. Das JDK (1.6 u1 und oben) Schiffe mit jhat und jmap. Diese tools helfen erheblich, vor allem wenn Sie jhat JavaScript-query-Unterstützung.
Finden Sie unter:
http://blog.ringerc.id.au/2011/06/java-ee-application-servers-learning.html
http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java
http://www.mhaller.de/archives/140-Memory-leaks-et-alii.html
http://blogs.oracle.com/sundararajan/entry/jhat_s_javascript_interface
InformationsquelleAutor Craig Ringer
Ich "gelöst", dies durch den Wechsel zu Tomcat.
InformationsquelleAutor George Armhold
(Ich kann nicht sehen den link, den Sie als es ist blockiert von websense also wenn ich wiederholte alles, was ich zu entschuldigen)
Es klingt wie Sie haben ein class loader Leck. Diese sind schwer aufzuspüren, fügen Sie diese Optionen, um die JVM-Optionen in Ihrem Beispiel-Konfiguration
Nun beim ausführen Ihrer app, man kann sich die jvm.melden Sie sich in Ihrer domain/logs-Ordner und sehen, was ' s be-und entladen. Meistens wahrscheinlich, sehen Sie die gleiche Klasse(N) laden immer und immer wieder.
Einen guten Schuldige ist JAXB, vor allem, wenn Sie erstellen eine neue JAXBContext immer und immer wieder.
InformationsquelleAutor Preston