GC log rotation data lose on application restart
Asked Answered
S

2

15

I use this jvm option in order to create gc logs and enable rolling:

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

However, I have a problem when I restart my application. After a restart, the first log file gc.log.0 is overwritten and the data of that file is not rolled to gc.log.1 and hence lost.

I'm wondering if I'm right and if there's a solution for this.

Thanks in advance!

Shedd answered 9/10, 2013 at 13:56 Comment(0)
P
18

You can also use java own timestamps for that:

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

%t will be replaced with a timestamp by java (see https://bugs.openjdk.java.net/browse/JDK-6950794 for information and other formats supported by -Xloggc

Psychopathology answered 3/4, 2016 at 19:23 Comment(2)
My favorite solution to the problem, because it also works inside of properties files (such as wrapper.conf). Thanks!Smyrna
When I tested this, the file for the pattern gc_%t.log looked like: gc_2016-12-06_16-46-30.log.0.current which contradicts the documentation you linked: %t - date stamp when log file is created (format: YYYY-MM-DD)Emersonemery
C
5

Same problem here, I fixed it by adding the timestamp to the gc log file name like this (in this case /etc/default/tomcat7):

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

this way you keep your gc logs after restart as jvm starts with a different timestamp and does not overwrite gc.logs written before. you need to clean up these files manually from time to time (cronjob).

Curtice answered 17/2, 2014 at 16:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.