I have a server running for a few days.
The GC output is being logged in a file using the -Xloggc option and we also use the -XX:+UseConcMarkSweepGC option.
This is all the options we use:
JAVA_OPTS="-server -Xmx8G -Xms8G -XX:+UseConcMarkSweepGC -Xloggc:/path/tomcat60-gc.log -XX:MaxPermSize=256M
I'm monitoring the GC logs. I made a graph from them and from this graph, it clearly looks like there have been 3 Full GCs up to now.
I checked the logs, and I found only 2 Full GC lines:
31670.165: [Full GC 492062K->289902K(8371584K), 1.3595440 secs]
334622.553: [Full GC 5146071K->1033389K(8371584K), 5.5670520 secs]
These 2 lines match perfectly with the first and the third Full GCs that I saw on the graph.
But there is no other Full GC line in the logs. So I looked at the graph to get the time of the "supposed" second Full GC, and at this time, in the logs, I see 2 weird lines:
178971.375: [GC 4255799K->4121568K(8371584K), 0.0251290 secs]
178971.404: [GC 4122013K(8371584K), 0.0093580 secs]
178978.615: [GC 4131606K(8371584K), 0.0199240 secs]
179206.097: [GC 953721K->816644K(8371584K), 0.0216090 secs] -> Note that the memory usage has strongly decreased
All the other lines in the logs are normal minor collection lines (like the lines before and after the 2 weird lines).
So I thought about two things to (not fully) explain those 2 weird lines:
1) They have been logged 'normally', after a minor collection:
At the time these minor collections happened, there was no object ready to be collected in the young generation, and so during these 2 minor collections, there was only some stuff moved from the young generation to the tenured generation, nothing was freed.
And that would mean that the Full GC that happened at that time was not logged at all, and so my question is..... why?
2) Those 2 lines have been logged because of a Full GC and this Full GC has just been logged in this weird way, and so I'd have the same question.......why?