Die Messung Zeit, die auf GC in der JVM
Angenommen, ich bin auf Tests einer Java-server-Anwendung. Ich weiß, wie viel Zeit es braucht, um den test abzuschließen. Jetzt würde ich gerne wissen, wie viel ausgegeben wurde und auf der GC bei diesem test. Wie kann ich es tun?
- Ich zähle die Zeit zu laufen von Ende zu Ende tests, einschließlich GC-Zeiten, und ich nur break it down, wenn ich will, um die Leistung zu optimieren zB. mit einem memory-profiler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfachste Möglichkeit ist die Verwendung der
-Xloggc
und-XX:-PrintGCTimeStamps
Optionen beim Start Ihrer JVM. Ich denke, es druckt aus, wie lange die garbage collection in Anspruch nimmt.http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
Ich glaube nicht, das ist eine sichere Annahme. Sind Sie sicher, dass der garbage collector wird nicht parallel arbeiten mit Ihrer Anwendung code?
Zur Messung der Zeit, die im sammeln von Müll, die Sie Abfragen können, die Garbage Collector MXBean.
Versuchen Sie dies:
GarbageCollectorMXBean
sind absolut die gleichen, im Vergleich zu den log geschrieben werden, indem die JVM-args.Dieser performance-Metrik erfasst wird von der JVM und zugänglich gemacht über JMX. Für das interaktive monitoring, eine Verbindung zu der JVM ausgeführt mit JConsole, und in der "VM " Zusammenfassung" Registerkarte und es wird etwas sagen wie:
Können Sie auch die Abfrage der JMX-Programm.
Andere praktische Lösung ist die Ausführung
jstat -gc
(Dokumentation) gegen Ihren Prozess, wenn die tests fertig sind. Das wird Sie schön aggregierten output auf genau, wie viel Zeit damit verbracht hat, in den GC während der Lebensdauer der JVM.Ermöglichen, garbage collection-Protokolle. Als dokumentiert, die Sie verwenden können
-verbose:gc
,-XX:+PrintGCDetails
und-XX:+PrintGCTimeStamps
flags.-Xloggc
- flag kann verwendet werden, um direkt die zu einer Datei.Protokolle sind für Menschen lesbar, aber für die meisten profitieren werden Sie wahrscheinlich wollen, dass Sie ausgeführt werden, durch einen analyzer. Solche Werkzeuge sind aufgelistet in dieser thread.
Gibt es verschiedene GC-algorithmen, die Verhalten sich anders. Vor kurzem Las ich ein guter Artikel auf das Thema, die ich empfehlen kann, wenn Sie möchte mehr wissen.
Starten Sie Ihre Anwendung mit den folgenden Kommandozeilen-Optionen
-verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails
und erhalten Informationen über GC.Hier ist ein Beispiel für die log-Meldung:
Ähnlich wie @Steve McLeod ' s Antwort, die verwendet ManagementFactory, seit Java 8 dies kann auch geschrieben werden in einer einzigen Zeile mit Java streams: