2016-05-30 6 views
2

Was ist der einfachste Weg, um Oracle Java 8 JVM Garbage Collector Durchsatz zu bestimmen, vorzugsweise mit JDK Kommandozeilen-Tools?Wie kann der JVM-GC-Durchsatz ermittelt werden?

Mit dem Befehl Jstat kann ich die gesamte Speicherbereinigung Zeit (GCT-Spalte) abrufen. Basierend auf dem Vergleich der Änderungen dieses Werts mit GC-Protokollen scheint der von Jstat ausgegebene GCT-Wert die kumulierte GC-verstrichene Zeit in Sekunden (seit JVM-Start) zu sein. Ist das korrekt?

Kann ich den GC-Durchsatz so berechnen?

1 - GCT/time_since_jvm_start 

jstat könnte verwendet werden, um sowohl die GC und Zeit seit JVM zu erhalten starten Sie den folgenden Befehl:

jstat -gcutil -t <jvm-pid> 1000 1 
+1

Was meinen Sie mit GC-Durchsatz? Es scheint mir, wenn Sie Ihre Frage lesen, Sie versuchen, den Prozentsatz der Zeit in GC zu berechnen? –

+0

Hier ist die Definition aus dem "HotSpot Virtual Machine Garbage Collection Tuning Guide": "Durchsatz ist der Prozentsatz der Gesamtzeit, die nicht in der Garbage Collection über lange Zeiträume betrachtet wird. Der Durchsatz beinhaltet die für die Zuweisung aufgewendete Zeit im Allgemeinen nicht benötigt). " – marko

+0

eine andere Vorstellung von Durchsatz ist Megabytes gesammelt pro Kern-Zeit oder Wandzeit. Wie auch immer, anstatt jstat zu verwenden, könntest du auch gc logging aktivieren und [gcviewer] verwenden (https://github.com/chewiebug/GCViewer) – the8472

Antwort

2

Sie sind in Ihrer Frage richtig. Die Spalte GCT enthält die Gesamtzeit, für die die JVM gestoppt wurde, um die Speicherbereinigung durchzuführen, und zwar sowohl im jungen als auch im vollständigen GC.

Sie können jstat während des Schreibens verwenden (jstat -gcutil -t <jvm-pid> 1000 1) und in der ersten Spalte die Gesamtzeit sehen, in der die JVM ausgeführt wurde. Nennen wir das uptime. Sowohl dieser Zeitstempel als auch die GC-Zeiten sind in Sekunden angegeben. Wenn Sie dann den Prozentsatz der Zeit nicht in GC ausgegeben berechnen möchten würden Sie tun, genau so, wie Sie schreiben:

1 - GCT/uptime 

Ich würde argumentieren, dass dieser Durchsatz Aufruf ein wenig irreführend ist. Wenn Sie beispielsweise den CMS-Collector verwenden, geschieht GC parallel zur Anwendung, wodurch der Anwendungsdurchsatz verringert wird, während die Anwendung nicht gestoppt wird.