Frage

Es sieht aus wie

 MemoryError: PermGen space
 java.lang.OutOfMemoryError: PermGen space

ist ein häufiges Problem. Sie können die Größe Ihres zul Raum erhöhen, aber nach 100 oder 200 redeploys wird es voll. Classloader-Tracking-Speicherleck ist nahezu unmöglich.

Was sind Ihre Methoden für Tomcat (oder einem anderen einfachen Servlet-Container - Jetty) auf Produktions-Server? Ist Neustart des Servers nach jeder deploy eine Lösung?

Haben Sie für viele Anwendungen einen Tomcat verwenden?

Vielleicht sollte ich viele Jetty-Server auf verschiedenen Ports verwenden (oder eine eingebettete Jetty) und tun undeploy / Neustart / deploy jedes Mal?

War es hilfreich?

Lösung

gab ich auf mit dem Kater-Manager und jetzt immer Abschaltung tomcat umschichten.

Wir betreiben zwei Katern auf demselben Server und verwenden Apache Webserver mit mod_proxy_ajp, so dass Benutzer beide Apps über den gleichen Port zugreifen können 80. Diese schön ist auch, weil die Nutzer den Apache-Dienst nicht verfügbar Seite sehen, wenn der Kater nach unten.

Andere Tipps

Sie können diese Java-Optionen Versuchen Sie:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

Dies ermöglicht die Garbage Collection in PermGen Raum (standardmäßig deaktiviert) und ermöglicht die GC zu entladenen Klassen. Darüber hinaus sollten Sie die -XX verwenden: PermSize = 64m -XX: MaxPermSize = 128m an anderer Stelle erwähnt Verfügung, um die Menge an PermGen zu erhöhen

.

Ja, das ist ein Problem. Wir laufen drei Web-Anwendungen auf einem Tomcat-Server: Nein. 1 verwendet ein Web Application Framework, Hibernate und viele andere JAR-Dateien, nein. 2 verwendet Hibernate und ein paar JAR-Dateien und keine. 3 ist im Grunde eine sehr einfache JSP-Anwendung.

Wenn wir nicht bereitstellen. 1, wir immer neu starten Tomcat. Sonst wird ein PermGen Raum Fehler bald uns beißen. No. 2 kann manchmal ohne Probleme eingesetzt werden, aber da es oft ändert sich, wenn nicht. 1 gilt auch, ist ein Neustart ohnehin geplant. No. 3 stellt kein Problem und kann beliebig oft eingesetzt werden, wie problemlos benötigt werden.

Also, ja, wir in der Regel Tomcat neu starten. Aber wir sind auch gespannt auf Tomcat 7 suchen, die angeblich viele Speicher / Klassenlade Probleme zu behandeln, die in verschiedene Dritt JARs und Frameworks bestattet werden.

PermGen in HotSpot schaltet das Problem nur verzögern, und schließlich werden Sie die OutOfMemoryError sowieso bekommen.

Wir haben dieses Problem eine lange Zeit hatten, und die einzige Lösung, die ich bisher gefunden habe ist JRockit zu verwenden, anstatt. Es hat keinen PermGen, so dass das Problem verschwindet einfach. Wir prüfen es auf unserem Test-Server jetzt, und wir haben nicht ein PermGen Problem, da der Schalter hatte. Ich habe auch versucht, mehr als 20 Mal auf meinem lokalen Rechner mit einem App Umschichtung, die auf dem ersten redeploy diesen Fehler bekommt, und alles tuckerte entlang schön.

JRockit sollte in OpenJDK integriert werden, so vielleicht dieses Problem für Lager Java weggehen wird auch in der Zukunft.

http://www.oracle.com/technetwork/middleware/ jrockit / Übersicht / index.html

Und es ist kostenlos, unter der gleichen Lizenz wie HotSpot:

https://blogs.oracle.com/henrik/entry/jrockit_is_now_free_and

Sie sollten PermGen Garbage Collection ermöglichen. Standardmäßig Hotspot VM nicht collect PermGen Müll, was bedeutet, dass alle geladenen Klassendateien bleiben für immer in Erinnerung. Jeder neue Einsatz lädt eine neue Reihe von Klassendateien, die bedeutet, dass Sie schließlich von PermGen Raum ausgehen.

Welche Version von Tomcat verwenden Sie? Tomcat 7 und 6.0.30 haben viele Features, diese Lecks oder zumindest warnen Sie über ihre Ursache.

zu vermeiden

Diese Präsentation von Mark Thomas von Springsource (und langjährigem Tomcat Committer) zu diesem Thema ist sehr interessant.

Nur Referenz, gibt es eine neue Version von Plumbr Werkzeug, das überwachen und Permanent Generation Lecks auch erkennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top