Wie diagnostizieren Sie eine Java-8 metaspace Leck?
Ich habe eine J2EE-Anwendung mit einigen interessanten Verhalten ... der heap verhält sich scheinbar gut, wächst und schrumpft mit der garbage collections, wie erwartet, im Laufe der Zeit. Es gibt keine nennenswerte long-term heap expansion. Jedoch, der metaspace nur hält stetig auf über 20 Mb pro Stunde bis wir Treffer MaxMetaspace und Begegnung eine OOME. Ich habe versucht, sowohl die parallel-und G1-garbage-collectors (jdk1.8.0_40).
Ist die Anwendung nicht immer neu bereitgestellt, die während der Ausführung, also es scheint nicht so, als wäre es die typische classloader Leck. Hat jemand Vorschläge, wie man auf die Spur der Ursache der Undichtigkeit?
- Haben Sie keine Antwort für diese noch?
- Können Sie uns mehr Informationen: JEE-server verwendeten Bibliotheken.
- Dies war ein Versuch, führen Sie eine legacy-J2EE-Anwendung auf JBoss-4.2.3.GA unter Java 8. Dies ist keine unterstützte Konfiguration, aber der Kunde wollte wirklich, es zu versuchen. Ich weiß, es wurden größere änderungen an der JBoss-zum laden von Klassen seit dann, so ich vermute, es war Klasse loader problem. Phillipe ' s erraten, unter Bezug auf die Generierung von proxies kann einige Verdienst haben. Wir schließlich beschlossen, den sauren Apfel beißen" und den port in der app an Wildfly 8.
- Ich habe auch vor ähnlichen problem, wir verwenden wildfly 10, nach mehreren redeploys der app Metaspace oom-Fehler ausgelöst. Erhöhung der max metaspace ist nur ein workaround, keine Lösung. Ich fand keine Lösung.
InformationsquelleAutor It Worked Yesterday | 2015-04-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun, einen heap dump und analysieren mit Eclipse MAT. Blick auf die Klassen, die Sie geladen haben. Überprüfen Sie, ob es etwas unerwartetes, vor allem doppelte Klassen. Es hat auch einen classloader explorer.
Bearbeiten:
Theoretisch könnte man ja auch sein, dass du ständig proxies generieren.
Die Hauptursache für die java.lang.OutOfMemoryError: Metaspace ist:
Wenn Sie wollen, um das problem zu reproduzieren, verwenden diesen code-snippet:
Alle diejenigen, die Klassendefinitionen Ende nimmt Metaspace.
Javaassist in Maven-repo.
Finden Sie eine Menge mehr über OOME hier