Jetty 7: OutOfMemoryError: PermGen space auf Anwendung erneut bereitstellen
Ersten mal app richtig startet. Dann habe ich löschen webapp/*.die war-Datei und fügen Sie die neue version von***.Krieg. Jetty-start für die Bereitstellung neuer Krieg aber Fehler java.lang.OutOfMemoryError: PermGen space
Auftritt. Wie kann ich das konfigurieren von Jetty zu beheben Fehler /richtige bereitstellen?
Diese Lösung hilft mir nicht.
Jetty-version: jetty-7.4.3.v20110701
InformationsquelleAutor fedor.belov | 2011-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es wohl keine Möglichkeit zu konfigurieren das problem Weg. Jede JVM - hat eine PermGen-Speicher-Bereich, der verwendet wird, für das laden von Klassen und statische Daten. Wenn Ihre Anwendung noch nicht eingesetzt wurde bekommt seinen classloader verworfen werden sollte, und alle Klassen, die geladen werden, wenn es als gut. Wenn dies scheitert, da andere Referenzen auf den classloader, der noch vorhanden ist, Müll zu sammeln, den classloader und Ihre Anwendungen Klassen auch nicht.
Ein blog-Eintrag und Ihre Folgen erklären, eine mögliche Quelle des Problems. Wenn der application-container - code verwendet eine Klasse, die einen Verweis auf eine Ihrer Klassen, garbage collection der Klassen verhindert. Das Beispiel aus dem genannten blog-Eintrag ist der
java.util.logging.Level
Konstruktor:Beachten Sie, dass
known
ist ein statischer member derjava.util.logging.Level
. Der Konstruktor speichert einen Verweis auf alle erstellten Instanzen. Also, sobald derLevel
Klasse war geladen oder instanziiert, die von außerhalb Ihrer Anwendung code, garbage collection nicht entfernen können Ihre Klassen.Um das problem zu lösen könnte man vermeiden, alle Klassen, die im Einsatz sind, außerhalb Ihrer eigenen code oder sicherzustellen, dass keine Referenzen gehalten werden, um Ihre Klassen außerhalb Ihres Codes. Beide Probleme könnten auftreten, die in jeder Klasse geliefert mit Java und sind damit nicht machbar, festgesetzt werden, innerhalb Ihrer Anwendung. Sie können nicht verhindern, dass das problem durch verändern nur Ihren eigenen code!
Ihre Optionen sind grundsätzlich:
Tut mir Leid, ich habe keine einfache Schritte zu Folgen. Sie können versuchen, einen gewöhnlichen heap-dump und zu untersuchen, für unerwartete Objekte. Die Verweise auf Sie, hat Sie vielleicht genug Ahnung, um vor Ort das Leck. Vielleicht finden Sie auch ein nützliches Werkzeug für die Suche in Eclipse Memory Analyzer: eclipse.org/mat
Antwort wurde editiert, weil blogs.oracle.com/fkieviet/entry/... wurde nach frankkieviet.blogspot.hu/2006/10/... und blogs.oracle.com/fkieviet/entry/how_to_fix_the_dreaded wurde nach frankkieviet.blogspot.hu/2006/10/... vielen Dank für die Aufzeichnung, @sasfalvi-tamás
InformationsquelleAutor Augustus Kling
Wenn ein PermGen aus dem Speicher Auftritt, müssen Sie neu starten der jvm, in Ihrem Fall starten Sie jetty. Sie können erhöhen Sie den PermGen-Speicherplatz mit der JVM-Optionen in Ihrem verlinkten Lösung, so geschieht dies später (mit später meine ich: nach mehr redeploys). Aber es wird geschehen, jeder einmal in eine Weile und Sie als Nächstes tun können, um nichts zu vermeiden. Die Antwort, die Sie im Zusammenhang gut erklärt, was PermGenSpace ist und warum es überläuft.
Verwenden:
oder, wenn das nicht genug war noch
Auch sicher sein, erhöhen Sie die Menge an Speicherplatz für die vm, in der Regel, wenn Sie verwenden Sie diese Befehle.
verwenden
InformationsquelleAutor Angelo Fuchs
Für Jetty 7.6.6 oder höher dies kann helfen,http://www.eclipse.org/jetty/documentation/current/preventing-memory-leaks.html.
Wir die
AppContextLeakPreventer
- und es hat geholfen, mit dem OOM-Fehler aufgrund von permgen spaceInformationsquelleAutor dvvrt
Ich habe das gleiche problem mit dem HotSpot, aber mit JRockit, die nicht über eine Permanente Generierung, das problem ist Weg. Es ist jetzt frei, so möchten Sie vielleicht, es zu versuchen: https://blogs.oracle.com/henrik/entry/jrockit_is_now_free_and
InformationsquelleAutor Niklas Herder
Sieht sehr viel wie Die permanente Generierung Leck. Sobald Ihre Anwendung Links einige Klassen zu hängen, um, nachdem es noch nicht eingesetzt wurde, erhalten Sie dieses problem. Sie können versuchen, die neueste version von Plumbr, vielleicht findet es die linke-Klassen.
InformationsquelleAutor Nikem
Für die Leser der Zukunft (im Vergleich zu, wenn diese Frage gestellt wurde):
In JDK 8 den Perm Gen Space ist Weg (nicht mehr da). Stattdessen gibt es jetzt Metaspace die sich aus dem einheitlichen Raum der Maschine.
Wenn Sie Probleme hatten, Perm Gen Überlauf wollen, dann sollten Sie einen Blick in diese Erklärung und diese Kommentare sind auf den Vorgang des Entfernens.
InformationsquelleAutor Angelo Fuchs