2017-01-13 1 views
1

Kürzlich Unser Produktionsserver: Tomcat6 wird häufig hängen und folgende Fehlermeldung "java.lang.OutOfMemoryError: PermGen Raum", die Windows 2003 Server ausgeführt wird mit 4 GB RAM. 25 Anwendungen laufen auf diesem Server, sieht so aus, als wäre es überlastet, aber es funktionierte vorher gut. Ich versuchte Speicherlecks zu bereinigen, wie das Schließen von DB-Verbindungen, und erhöhte den Heapspeicher mit JAVA_OPTS. Trotzdem konnte ich die genaue Ursache nicht finden. Auch unser Tomcat6 war nicht mit einer Manager-Anwendung konfiguriert, daher konnte ich keine Speicher-/Zustandsprüfungen durchführen. Bitte führe mich, um das zu lösen.Tomcat6 wird häufig wegen: java.lang.OutOfMemoryError: PermGen Raum

+1

PermGen wird am häufigsten mit Klassendefinitionen zugeordnet sind (und mit bestimmten älteren XML-Parser, IIRC). Möglicherweise möchten Sie explizit mehr PermGen-Speicherplatz zuweisen, da Sie 25 verschiedene Anwendungen ausführen (wahrscheinlich jeweils mit leicht unterschiedlichen Versionen der verschiedenen unterstützenden Bibliotheken). Siehe http://StackOverflow.com/questions/3003855/increase-permgen-space – Gus

Antwort

1

Sie müssen den PermGen Raum erhöhen Bearbeitung Ihrer JAVA_OPTS und mit der Option XX: MaxPermSize (zum Beispiel -XX:MaxPermSize=1024m). Das Vergrößern der Zwischenspeichergröße (Xmx) ist in Ihrem Fall nicht sinnvoll.

Ich schlage vor, auch die Verwendung eines Monitoring-Tool (APM) wie Glowroot die Speichernutzung zu untersuchen, und passen Sie Ihren JAVA_OPTS nach Bedarf.

Weitere Informationen über den Zweck des PermGen Raum und seine Garbage Collection-Mechanismus, Blick auf diese Antwort: https://stackoverflow.com/a/5387423/3260495

+1

Danke @Robert Hume, aber ich habe bereits MaxPermSize in JAVA_OPTS hinzugefügt mit folgendem Satz "JAVA_OPTS =% JAVA_OPTS% -Xms1024m -Xmx1024m -XX: MaxPermSize = 1024m -XX: + CMSClassUnloadingEnabled -XX: + CMSPermGenSweepingEnabled -server ". Aber immer noch das Problem, Gibt es trotzdem zu verfolgen, ob Tomcat-Instanz wählen Sie MaxPermSize oder nicht? APM wäre eine gute Idee, ich werde versuchen, dass – Vic

+0

Angesichts der Tatsache, dass Sie nicht den Tomcat Manager haben, können Sie das '-XX: + PrintCommandLineFlags' Argument zu 'JAVA_OPTS' hinzufügen, starten Sie den Server neu und überprüfen Sie dann die' logs/catalina .out' Datei: Sie sollten eine Zeile sehen, die alle Befehlszeilen Flags enthält, die Sie mit 'JAVA_OPTS' angegeben haben. –

+1

Dank @Robert Hume, auch nach dem Hinzufügen von PrintCommandLine-Argument zu 'JAVA_OPTS' auch ich bekomme keine Details in den Protokollen. nur ein Gedanke, vorerst, gibt es eine Möglichkeit zu finden, ob der Tomcat läuft oder nicht?, zum Beispiel Ping von verschiedenen Server und E-Mail-Benachrichtigung, wenn Tomcat reagiert nicht (wie URL-Content-Monitor), zumindest können wir sofortige Aktion erhalten, während der Server hängen bleibt – Vic

Verwandte Themen