Messzeit für GC in JVM

8

Angenommen, ich teste eine Java-Server-Anwendung. Ich weiß, wie viel Zeit es braucht, um den Test zu beenden. Jetzt würde ich gerne wissen, wie viel während dieses Tests für GC ausgegeben wurde. Wie kann ich es tun?

    
Michael 17.12.2012, 13:45
quelle

7 Antworten

6

Am einfachsten ist es, die Optionen -Xloggc und -XX:-PrintGCTimeStamps beim Start Ihrer JVM zu verwenden. Ich denke, es gibt aus, wie lange die Müllsammlung dauert.

Ссылка

    
hvgotcodes 17.12.2012, 13:50
quelle
21
  

Ich denke, wenn GC (Garbage Collector) arbeitet, stoppt die Anwendung und wird fortgesetzt, wenn GC beendet wird.

Ich glaube nicht, dass das eine sichere Annahme ist. Sind Sie sicher, dass der Garbage Collector nicht parallel mit Ihrem Anwendungscode arbeitet?

Um die Zeit zu messen, die beim Sammeln von Müll aufgewendet wurde, können Sie die Müllsammler MXBean .

Versuchen Sie Folgendes:

%Vor%     
Steve McLeod 17.12.2012 13:50
quelle
3

Eine weitere praktische Lösung ist die Ausführung von jstat -gc ( Dokumentation ) ) gegen Ihren Prozess, wenn Ihre Tests abgeschlossen sind. Dadurch erhalten Sie eine gute Gesamtausgabe der genauen Zeit, die Sie während der Lebensdauer Ihrer JVM in GC verbracht haben.

    
K Erlandsson 19.12.2012 22:15
quelle
2

Diese Leistungsmetrik wird von der JVM aufgezeichnet und über JMX zugänglich gemacht. Stellen Sie für die interaktive Überwachung eine Verbindung zur laufenden JVM mit JConsole her, und auf der Registerkarte "VM-Zusammenfassung" wird etwa Folgendes angezeigt:

  

Garbage Collector: Name = 'Kopieren', Sammlungen = 26, Gesamtzeit = 0,183 Sekunden   Müllsammler: Name = 'MarkSweepCompact', Sammlungen = 2, Gesamtzeit = 0,168 Sekunden

Sie können JMX auch programmatisch abfragen.

    
meriton 17.12.2012 13:51
quelle
1

Aktivieren Sie Garbage Collection-Protokolle. Als dokumentiert können Sie -verbose:gc , -XX:+PrintGCDetails und -XX:+PrintGCTimeStamps Flags. -Xloggc flag kann verwendet werden, um diese in eine Datei zu leiten.

Die resultierenden Protokolle sind für Menschen lesbar, aber für die meisten Vorteile möchten Sie wahrscheinlich, dass sie durch einen Analysator laufen. Solche Tools sind in diesem Thema aufgelistet.

    
eis 17.12.2012 13:50
quelle
1

Es gibt verschiedene GC-Algorithmen, die sich unterschiedlich verhalten. Ich habe kürzlich einen guten Artikel gelesen Thema, das ich empfehlen kann, wenn Sie mehr wissen möchten.

Sie können Ihre Anwendung mit den folgenden Befehlszeilenoptionen -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails starten und Informationen über GC erhalten.

Hier ist ein Beispiel für die Protokollnachricht:

  

2012-12-17T03: 02: 15.590-0500: [GC [PSYoungGen: 40934K- & gt; 2670K (29440K)]   48211K- & gt; 14511K (73152K), 0,5745260 Sekunden] [Times: user = 0,08 sys = 0,01,   real = 0,58 Sekunden]

    
Andrew Logvinov 17.12.2012 13:51
quelle
1

Ähnlich wie @steve McLeods Antwort, die ManagementFactory verwendet Seit Java 8 kann dies auch mit in einer Zeile geschrieben werden Java-Streams :

%Vor%     
Markus Weninger 26.09.2017 07:37
quelle