Java 8 verwendet metaspace, die fähig ist, expandiert dynamisch. GC läuft auf metaspace, wenn die immer voll. Bedeutet das, dass GC nie auf metaspace?
Meine Java-8-Anwendung verwendet VIEL Speicher. Ich würde gerne wissen, was ist die Größe der meine metaspace an der Laufzeit. Wie mache ich das?
Ich denke da an die Einstellung MaxMetaspaceSize
. Was sollte ich ihn auf? Irgendwelche Empfehlungen?
Option 1:
Ausführen
(mit PID ersetzt durch die PID von der JVM überwacht) die Rückkehr sth. wie:
Laut diese von Interesse sind:
So, in diesem Fall über 181mb von Metaspace sind verpflichtet, während 137mb werden derzeit.
Option 2:
Wenn Sie die garbage collection Protokolle aktiviert Sie können auch finden, diese heraus von dort, z.B. nach einem Absturz, oder bereits ein Problem gemeldet wurde.
Suche nach Zeilen wie
Stellt dies eine änderung der Größe des Metaspace als die vorherigen Schwellenwert erreicht wurde.
enthält die relevanten Informationen: 34,9 mb verwendet wurden, sowohl vor als auch nach GC.
Die neuesten log-Einträge, die Sie finden können, zeigt die aktuelle Größe (das heißt: nach GC).
Beachten Sie, dass die vollständige GC immer ausgeführt, wenn Metaspace in der Größe geändert wird. So ist es eine gute Idee zu konfigurieren, dass ein guter Startwert für diese, wenn Sie bereits wissen, dass der default-Wert von ~21mb (je nach Host-Konfiguration), ist nicht genug.
Sehen diese für weitere Informationen über tuning Metaspace Größe.
man jstat
gibt die richtigen Interpretationen von "MC: Metaspace Kapazität (kB)" und "MU: Metacspace Auslastung (kB)", nicht "engagiert" und "verwendet".Ja, es ist besser,
MaxMetaspaceSize
wenn Sie denken, es ist undicht, zu überwachen und zu beheben.Verwenden jcmd. Es ist die am besten integrierten oracle-tool für die Suche nach diesem Zeug in Java 8. Vom terminal...
HINWEIS: Sie benötigen zum ausführen jcmd als beliebiger Benutzer gestartet, der java-Prozess. Wenn Sie das Debuggen auf einem webserver wie Jetty, die Sie benötigen können, um den Benutzer zu wechseln, mit etwas
sudo su jetty
.jcmd
jcmd <pid> VM.native_memory
Dies hat
jcmd <pid> help
jcmd <pid> GC.heap_info
geben Sie grundlegende Informationen über Metaspace Größe und erfordert keine NMT aktiviert wird.