2013-10-09 7 views
9

Ich benutze diese JVM-Option, um gc-Protokolle und ermöglichen Rollen zu erstellen:GC Logfolge Angaben über die Anwendung neu starten verlieren

$ java -Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 XX:GCLogFileSize=128K 

aber ich habe ein Problem, wenn ich meine Anwendung neu starten. Nach einem Neustart wird die erste Protokolldatei gc.log.0 überschrieben und die Daten dieser Datei werden nicht auf gc.log.1 gerollt und daher verloren.

Ich frage mich, ob ich Recht habe und ob es eine Lösung dafür gibt.

Vielen Dank im Voraus!

Antwort

7

Sie können auch Java-eigenen Zeitstempel für diese Verwendung:

java -Xloggc:gc-%t.log ...(rest of your line)... 

%t wird mit einem Zeitstempel von Java ersetzt werden (siehe https://bugs.openjdk.java.net/browse/JDK-6950794 für Informationen und andere unterstützten Formate von -Xloggc

+0

Meine Liebling Lösung für das Problem , denn es funktioniert auch innerhalb von Eigenschaftendateien (zB wrapper.conf). Danke! – dokaspar

+0

Als ich das getestet habe, sah die Datei für das Muster 'gc_% t.log' so aus:' gc_2016-12-06_16-46-30 .log.0.current', das der Dokumentation widerspricht, die Sie verlinkt haben: '% t - Datumsstempel, wenn die Protokolldatei erstellt wird ated (Format: JJJJ-MM-TT) ' – joseph

5

Das gleiche Problem hier, fest ich es durch den Zeitstempel auf dem wie diese gc Protokolldateinamen hinzugefügt wird (in diesem Fall/etc/default/tomcat7):

DATE=`date +%Y-%m-%d-%H-%M` 
JAVA_OPTS="-Xloggc:/var/log/tomcat7/gc-$DATE.log ..." 

diese Weise können Sie Ihre gc Protokolle halten nach neu starten, da jvm mit einem anderen Zeitstempel startet und die zuvor geschriebenen gc.logs nicht überschreibt. Sie müssen diese Dateien von Zeit zu Zeit manuell bereinigen (Cronjob).