[JAVA] Verwendung von GC Viewer
Ich habe GC Viewer verwendet, um das GC-Protokoll von JVM nach langer Zeit zu überprüfen, daher werde ich eine Notiz hinterlassen.
Umgebung
- OS: Windows 8.1
- Java: java version "1.8.0_231"
- Gcviewer: gcviewer-1.36-SNAPSHOT.jar
herunterladen
Klicken Sie auf den Link für die neueste Version von "download | download mac version" auf der folgenden Seite, um sie herunterzuladen.
https://github.com/chewiebug/GCViewer/wiki/Changelog
Unter Windows wird die JAR-Datei heruntergeladen. Legen Sie sie daher in einem beliebigen Ordner ab.
Anlaufen
- Doppelklicken Sie auf das gcviewer-Glas
→ Der folgende Bildschirm wird angezeigt
- Ziehen Sie die GC-Protokolltextdatei per Drag & Drop in das Fenster
→ Der folgende Bildschirm wird angezeigt
Ändern Sie die Anzeige
- Aktivieren Sie Menü> Ansicht> Datenfenster
→ Das Datenfeld rechts verschwindet und wird breiter
- Klicken Sie mit der rechten Maustaste auf die Zeitspalte> Startzeit des Protokolls prüfen
→ Die Zeitspalte wird als Zeit angezeigt (wenn das GC-Protokoll einen Zeitstempel enthält)
- Überprüfen Sie den Gesamthaufen
→ Die Gesamtgröße des Heapspeichers wird rot angezeigt
Hier werden -Xms (Startgröße) und -Xmx (maximale Größe) auf denselben Wert gesetzt, sodass die gesamte Heap-Größe in einer geraden Linie verläuft.
- Deaktivieren Sie Total Heap und aktivieren Sie die Option Tenured Generation, Young Generation
→ Die Größe der jungen Generation wird in Gelb und die Größe der Tenured-Generation (alte Generation) in Lila angezeigt.
Normalerweise junge Generation + feste Generation = Gesamthaufen
- Überprüfen Sie den gebrauchten Tenured Heap, den gebrauchten jungen Heap
→ Die Heap-Nutzung in jeder Generation kann als Linie angesehen werden. Die vertikale Linie zeigt an, dass der Speicher vom GC freigegeben wurde.
- Passen Sie das Verhältnis im Auswahlfeld oben so an, dass der Anfang / das Ende des GC-Protokolls in das gesamte Fenster passt (★ wichtig).
Wenn Sie dies nicht tun, denken Sie möglicherweise, dass es kein Problem gibt, nur einen Teil des Bereichs zu überprüfen. Dieses Mal habe ich das Verhältnis zu diesem Zeitpunkt angepasst, aber es ist besser, die Untersuchung zu starten, nachdem es möglich ist, das Ganze so schnell wie möglich zu sehen.
Was Sie aus der Grafik sehen können
- Junge GC tritt ziemlich häufig auf. Yong GC befreit die junge Generation fast (graue Linie fällt unter den gelben Bereich)
- Die Tenured Generation Full GC ist zweimal aufgetreten. Beide sind fast auf den Boden gefallen, also wurden sie freigelassen. Danach mache ich mir Sorgen, dass die Erinnerung an den Tenured-Bereich zunimmt. Wahrscheinlich wird danach wieder eine vollständige GC auftreten, aber wenn sie zu diesem Zeitpunkt nach unten freigegeben wird, gibt es kein Problem (kein Vertrauen).
- Überprüfen Sie den gebrauchten Heap
→ Bisher wurden die junge Generation und die Tenured-Generation getrennt angezeigt. Jetzt wird die Summe aus Young-Generation und Tenured-Generation (= Heap-Nutzung) in Blau angezeigt.
- Überprüfen Sie die vollständigen GC-Linien
→ Full GC wird als schwarze Linie sichtbar
Überprüfen Sie den Standpunkt
- Ist die Heap-Nutzung der Young-Generation nach Young GC auf den Grund gefallen?
- Ist die Heap-Nutzung der Tenured-Generation nach Full GC auf den Grund gefallen?
Eigentlich weiß ich nicht wirklich, wie man GC-Protokolle auswertet.
In dieser Grafik nimmt die Anzahl der Tenured-Generationen zu. Sollte sie jedoch im nächsten vollständigen GC nach unten freigegeben werden?