Wie leite ich die Ausgabe der ausführlichen Speicherbereinigung in eine Datei um?

69

Wie leite ich die Ausgabe der ausführlichen Speicherbereinigung in eine Datei um? Die Website von Sun zeigt ein Beispiel für Unix, funktioniert jedoch nicht für Windows.

Djangofan
quelle

Antworten:

92

Aus der Ausgabe von java -X:

    -Xloggc: <Datei> protokolliert den GC-Status in einer Datei mit Zeitstempeln

Dokumentierte hier :

-Xloggc: Dateiname

Legt die Datei fest, in die ausführliche GC-Ereignisinformationen zur Protokollierung umgeleitet werden sollen. Die in diese Datei geschriebenen Informationen ähneln der Ausgabe von -verbose:gcmit der Zeit, die seit dem ersten GC-Ereignis vor jedem protokollierten Ereignis vergangen ist. Die -XloggcOption wird überschrieben, -verbose:gcwenn beide mit demselben javaBefehl angegeben werden.

Beispiel:

    -Xloggc: garbage-collection.log

Die Ausgabe sieht also ungefähr so ​​aus:

0,590: [GC 896 K → 278 K (5056 K), 0,0096650 Sekunden]
0,906: [GC 1174K-> 774K (5056K), 0,0106856 Sekunden]
1,320: [GC 1670 K → 1009 K (5056 K), 0,0101132 Sekunden]
1,459: [GC 1902K-> 1055K (5056K), 0,0030196 Sekunden]
1,600: [GC 1951K → 1161 K (5056 K), 0,0032375 Sekunden]
1,686: [GC 1805 K → 1238 K (5056 K), 0,0034732 Sekunden]
1,690: [Full GC 1238K-> 1238K (5056K), 0,0631661 Sekunden]
1,874: [GC 62133K-> 61257K (65060K), 0,0014464 Sekunden]
Michael Myers
quelle
java --Xloggc: firstgen.log -Xloggc: secondgen.log scheint übrigens nicht zu funktionieren.
Djangofan
Dies erhöht auch nicht die Leistung, wie ich erwartet hatte. Nach Verwendung dieser Argumente gibt es keine zusätzlichen Details: -Xloggc: gc.log -XX: -PrintGCDetails
djangofan
6
"-XX: + PrintGCDetails" scheint mit -Xloggc zu funktionieren. Ich weiß nicht, warum die Sun-Seite ein - anstelle eines + hat.
Michael Myers
das hat funktioniert. Vielen Dank! Jetzt benutze ich diese Optionen: setze JAVA_OPTS =% JAVA_OPTS% -Xloggc: logs \ gc.log -XX: + PrintGCDetails -XX: MaxPermSize = 128m
djangofan
38

Wenn Sie die Ausgabe zusätzlich in eine separate Datei leiten möchten, haben Sie folgende Möglichkeiten:

Auf einer Sun JVM:

-Xloggc:C:\whereever\jvm.log -verbose:gc -XX:+PrintGCDateStamps

AUF einer IBM JVM:

-Xverbosegclog:C:\whereever\jvm.log 
Marc Giombetti
quelle
6
Wenn Sie -Xloggc verwenden, benötigen Sie -verbose: gc nicht.
Mirko Ebert
11

Java 9 & Unified JVM-Protokollierung

JEP 158 führt ein gemeinsames Protokollierungssystem für alle Komponenten der JVM ein, das die Funktionsweise der Protokollierung mit GC ändert (und IMO vereinfacht). JEP 158 hat eine neue Befehlszeilenoption hinzugefügt, um die Protokollierung aller Komponenten der JVM zu steuern:

-Xlog

Zum Beispiel die folgende Option:

-Xlog:gc

protokolliert mit gctag getaggte Nachrichten mit infolevel to stdout. Oder dieses:

-Xlog:gc=debug:file=gc.txt:none

würde Nachrichten, die mit gctag getaggt sind, mit debuglevel in einer Datei protokollieren, die gc.txtohne Dekorationen aufgerufen wird . Weitere Informationen finden Sie in den Beispielen auf der JEP- Seite.

Ali Dehghani
quelle
1
Mit JDK 16 erhalten Sie sogar eine Warnung, wenn Sie die alte -Xloggcanstelle von-Xlog:gc:...
martin-g
7

Um die obigen Antworten zu ergänzen, gibt es einen guten Artikel: Nützliche JVM-Flags - Teil 8 (GC-Protokollierung) von Patrick Peschlow.

Ein kurzer Auszug:

Das Flag -XX:+PrintGC(oder der Alias -verbose:gc) aktiviert den „einfachen“ GC-Protokollierungsmodus

Standardmäßig wird das GC-Protokoll in stdout geschrieben. Mit können -Xloggc:<file>wir stattdessen eine Ausgabedatei angeben. Beachten Sie, dass dieses Flag implizit auch -XX:+PrintGCund setzt -XX:+PrintGCTimeStamps.

Wenn wir -XX:+PrintGCDetailsstattdessen verwenden -XX:+PrintGC, aktivieren wir den "detaillierten" GC-Protokollierungsmodus, der sich je nach verwendetem GC-Algorithmus unterscheidet.

Mit -XX:+PrintGCTimeStampseinem Zeitstempel, der die in Sekunden seit dem JVM-Start verstrichene Echtzeit widerspiegelt, wird jeder Zeile hinzugefügt.

Wenn wir angeben -XX:+PrintGCDateStamps, beginnt jede Zeile mit dem absoluten Datum und der absoluten Uhrzeit.

18446744073709551615
quelle