Long safepoint pause directly after GC log file rotation in 1.7.0_80

Rainer Jung rainer.jung at kippdata.de
Mon Nov 9 20:23:25 UTC 2015


Hi,

after upgrading from 1.7.0_76 to 1.7.0_80 we experience long pauses 
directly after a GC log rotation.

The pause duration varies due to application and load but is in the 
range of 6 seconds to 60 seconds. There is no GC involved, i.e. no GC 
output is written related to these pauses.

Example:

Previous file ends with:

2015-11-09T01:28:36.832+0100: 38461,486: Application time: 5,2840810 seconds
{Heap before GC invocations=7366 (full 8):
par new generation   total 458752K, used 442678K [0xfffffffe00400000, 
0xfffffffe20400000, 0xfffffffe20400000)
   eden space 393216K, 100% used [0xfffffffe00400000, 
0xfffffffe18400000, 0xfffffffe18400000)
   from space 65536K,  75% used [0xfffffffe18400000, 0xfffffffe1b44d998, 
0xfffffffe1c400000)
   to   space 65536K,   0% used [0xfffffffe1c400000, 0xfffffffe1c400000, 
0xfffffffe20400000)
concurrent mark-sweep generation total 3670016K, used 1887085K 
[0xfffffffe20400000, 0xffffffff00400000, 0xffffffff00400000)
concurrent-mark-sweep perm gen total 524288K, used 453862K 
[0xffffffff00400000, 0xffffffff20400000, 0xffffffff20400000)
2015-11-09T01:28:36.839+0100: 38461,493: 
[GC2015-11-09T01:28:36.840+0100: 38461,493: [ParNew
Desired survivor size 33554432 bytes, new threshold 16 (max 31)
- age   1:    2964800 bytes,    2964800 total
- age   2:    2628048 bytes,    5592848 total
- age   3:    1415792 bytes,    7008640 total
- age   4:    1354008 bytes,    8362648 total
- age   5:    1132056 bytes,    9494704 total
- age   6:    1334072 bytes,   10828776 total
- age   7:    1407336 bytes,   12236112 total
- age   8:    3321304 bytes,   15557416 total
- age   9:    1531064 bytes,   17088480 total
- age  10:    2453024 bytes,   19541504 total
- age  11:    2797616 bytes,   22339120 total
- age  12:    1698584 bytes,   24037704 total
- age  13:    1870064 bytes,   25907768 total
- age  14:    2211528 bytes,   28119296 total
- age  15:    3626888 bytes,   31746184 total
: 442678K->37742K(458752K), 0,0802687 secs] 
2329763K->1924827K(4128768K), 0,0812120 secs] [Times: user=0,90 
sys=0,03, real=0,08 secs]
Heap after GC invocations=7367 (full 8):
par new generation   total 458752K, used 37742K [0xfffffffe00400000, 
0xfffffffe20400000, 0xfffffffe20400000)
   eden space 393216K,   0% used [0xfffffffe00400000, 
0xfffffffe00400000, 0xfffffffe18400000)
   from space 65536K,  57% used [0xfffffffe1c400000, 0xfffffffe1e8db9a0, 
0xfffffffe20400000)
   to   space 65536K,   0% used [0xfffffffe18400000, 0xfffffffe18400000, 
0xfffffffe1c400000)
concurrent mark-sweep generation total 3670016K, used 1887085K 
[0xfffffffe20400000, 0xffffffff00400000, 0xffffffff00400000)
concurrent-mark-sweep perm gen total 524288K, used 453862K 
[0xffffffff00400000, 0xffffffff20400000, 0xffffffff20400000)
}
....
2015-11-09T01:28:36.921+0100: 38461,575: Total time for which 
application threads were stopped: 0,0888232 seconds, Stopping threads 
took: 0,0005420 seconds
2015-11-09T01:28:59.821+0100: 38484,474: Application time: 0,0002954 seconds
2015-11-09T01:28:59.823+0100: 38484,477: Total time for which 
application threads were stopped: 0,0026081 seconds, Stopping threads 
took: 0,0004146 seconds
2015-11-09T01:28:59.824+0100: 38484,477: Application time: 0,0003073 seconds
2015-11-09T01:28:59.826+0100: 38484,480: Total time for which 
application threads were stopped: 0,0025411 seconds, Stopping threads 
took: 0,0004064 seconds
2015-11-09T01:28:59.827+0100: 38484,480: Application time: 0,0002885 seconds
2015-11-09 01:28:59 GC log file has reached the maximum size. Saved as 
./application/logs-a/mkb_gc.log.2

This output looks normal. Last timestamp is 2015-11-09T01:28:59.827

Now the next file begins:

2015-11-09 01:28:59 GC log file created ./application/logs-a/mkb_gc.log.3
Java HotSpot(TM) 64-Bit Server VM (24.80-b11) for solaris-sparc JRE 
(1.7.0_80-b15), built on Apr 10 2015 18:47:18 by "" with Sun Studio 12u1
Memory: 8k page, physical 133693440k(14956840k free)
CommandLine flags: -XX:AllocateInstancePrefetchLines=2 
-XX:AllocatePrefetchInstr=1 -XX:AllocatePrefetchLines=6 
-XX:AllocatePrefetchStyle=3 -XX:+CMSClassUnloadingEnabled 
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses 
-XX:GCLogFileSize=10485760 -XX:InitialHeapSize=4294967296 
-XX:MaxHeapSize=4294967296 -XX:MaxNewSize=536870912 
-XX:MaxPermSize=536870912 -XX:MaxTenuringThreshold=31 
-XX:NewSize=536870912 -XX:NumberOfGCLogFiles=10 -XX:OldPLABSize=16 
-XX:ParallelGCThreads=16 -XX:PermSize=536870912 -XX:+PrintGC 
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 
-XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:SurvivorRatio=6 
-XX:-UseAdaptiveSizePolicy -XX:+UseCompressedOops 
-XX:+UseConcMarkSweepGC -XX:+UseGCLogFileRotation -XX:+UseParNewGC
2015-11-09T01:29:55.640+0100: 38540,292: Total time for which 
application threads were stopped: 55,8119519 seconds, Stopping threads 
took: 0,0003857 seconds
2015-11-09T01:29:55.648+0100: 38540,299: Application time: 0,0076173 seconds

Note the 55.8 seconds pause directly after printing the flags and the 
consistent timestamp jump from 01:28:59 to 01:29:55. There's no GC 
output, although verbose GC is active and works. For some other reason 
there is a very long safepoint. Note also, that the time is not due to 
waiting until the safepoint is reached. At least the log claims that 
reaching the safepoint only took 0.008 seconds. Also at that timeof day 
the servers are not very busy.

Is there any idea, what happens here? Anything that rings a bell between 
1.7.0_76 and 1.7.0_80? Why should there be a long safepoint directly 
after GC rotation opened a new file?

I searched the bug parade, but didn't find a good hit. There was also 
nothing in the change for JDK-7164841 that seemed immediately 
responsible for a long pause.

Unfortunately this happens on a production system and the first thing 
was to roll back to the old Java version.Not sure, how good this will be 
reproducible on a test system (will check tomorrow).

Thanks for any hint,

Rainer


More information about the hotspot-gc-use mailing list