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.
Antworten:
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:gc
mit der Zeit, die seit dem ersten GC-Ereignis vor jedem protokollierten Ereignis vergangen ist. Die-Xloggc
Option wird überschrieben,-verbose:gc
wenn beide mit demselbenjava
Befehl 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]
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
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 gc
tag getaggte Nachrichten mit info
level to stdout
. Oder dieses:
-Xlog:gc=debug:file=gc.txt:none
würde Nachrichten, die mit gc
tag getaggt sind, mit debug
level in einer Datei protokollieren, die gc.txt
ohne Dekorationen aufgerufen wird . Weitere Informationen finden Sie in den Beispielen auf der JEP- Seite.
-Xloggc
anstelle von-Xlog:gc:...
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:+PrintGC
und setzt -XX:+PrintGCTimeStamps
.
Wenn wir -XX:+PrintGCDetails
stattdessen verwenden -XX:+PrintGC
, aktivieren wir den "detaillierten" GC-Protokollierungsmodus, der sich je nach verwendetem GC-Algorithmus unterscheidet.
Mit -XX:+PrintGCTimeStamps
einem 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.