2016-04-21 5 views
3

Ich untersuche derzeit einige von Meta-Space-Probleme, die wir in letzter Zeit erlebt haben. Einer der Hauptschuldigen scheint das Laden von doppelten Klassen bei der erneuten Implementierung einer WAR zu sein. Wenn ich es lokal mit nur einem unserer WARS ausprobiere, durch Heap-Dumping nach dem vollständigen Deployment, kann ich sehen, dass die Mehrheit der von der Anwendung erstellten Instanzen immer noch da ist (selbst nach der Garbage-Collection).Neuverteilung auf Wildfly verursachen outofmemory: Metaspace

Aus dem Heap-Dump kann ich sehen, dass es die ManagedThreadFactoryImpl scheint, die auf Referenzen hält.

Gibt es irgendetwas, was ich tun kann, um die Anwendung herunterzufahren, so dass es nach sich selbst aufräumt?

Alle unsere WARs sind Federanwendungen, die meisten verwenden Scheduling/asynchrone Elemente.

Wir verwenden JDK8 mit Wildfly 8.2

+0

Das gleiche Problem mit JDK8 und Wildfly 10. – FransGuelinckx

Antwort

0

scheint, wie die Klassenladeprogramme nicht sind entladen. Versuchen Sie Java Mission Control (JMC) und zeichnen Sie den Anwendungsfall auf. Dadurch können Sie zu einem bestimmten Zeitpunkt in Ihrer Aufnahme gehen und das Problem beheben. Es gibt den Snapshot von Klassen, die zu einem bestimmten Zeitpunkt geladen wurden, mit Stacktrace, Threaddumps und vielen wichtigen Dingen.

JMC ist in JDK enthalten. Sie können weitere Informationen hier finden: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr002.html#BABIBBDE

Sie müssen nicht durch den Schmerz der Einnahme von Heap-Dumps gehen und dann auf ein Werkzeug warten, um es zu analysieren.