Very frequent CMS without obvious reason

Peter B. Kessler Peter.B.Kessler at Oracle.COM
Thu Nov 8 01:35:13 UTC 2012


In fact, it looks like your permanent generation *is* nearly out of space.  746784K/811008K is 92% full, which is over the default CMSTriggerPermRatio of 80% (in JDK-6).  What happens if you make the permanent generation larger?

			... peter

Rainer Jung wrote:
> We have an application running that after some time starts to do very frequent CMS without any reason I can see. Here's a snippet from a GC log where soon after starting the CMS a young generation collection happens, so that we can easily see the amount of memory currently in use:
> 
> 06.11.2012 10:48:31 65102.013: [GC [1 CMS-initial-mark: 1461672K(2469888K)] 2026034K(3125248K), 0.6163870 secs] [Times: user=0.62 sys=0.00, real=0.62 secs]
> 06.11.2012 10:48:31 Total time for which application threads were stopped: 0.6173730 seconds
> 06.11.2012 10:48:31 65102.630: [CMS-concurrent-mark-start]
> 06.11.2012 10:48:31 Application time: 0.0012740 seconds
> 06.11.2012 10:48:31 {Heap before GC invocations=912 (full 39):
> 06.11.2012 10:48:31  par new generation   total 655360K, used 564361K [0x0000000707c00000, 0x0000000737c00000, 0x0000000737c00000)
> 06.11.2012 10:48:31   eden space 524288K, 100% used [0x0000000707c00000, 0x0000000727c00000, 0x0000000727c00000)
> 06.11.2012 10:48:31   from space 131072K,  30% used [0x000000072fc00000, 0x0000000732322670, 0x0000000737c00000)
> 06.11.2012 10:48:31   to   space 131072K,   0% used [0x0000000727c00000, 0x0000000727c00000, 0x000000072fc00000)
> 06.11.2012 10:48:31  concurrent mark-sweep generation total 2469888K, used 1461672K [0x0000000737c00000, 0x00000007ce800000, 0x00000007ce800000)
> 06.11.2012 10:48:31  concurrent-mark-sweep perm gen total 811008K, used 746784K [0x00000007ce800000, 0x0000000800000000, 0x0000000800000000)
> 06.11.2012 10:48:31 65102.633: [GC 65102.633: [ParNew
> 06.11.2012 10:48:31 Desired survivor size 67108864 bytes, new threshold 15 (max 15)
> 06.11.2012 10:48:31 - age   1:    5295680 bytes,    5295680 total
> 06.11.2012 10:48:31 - age   2:    2371208 bytes,    7666888 total
> 06.11.2012 10:48:31 - age   3:     798848 bytes,    8465736 total
> 06.11.2012 10:48:31 - age   4:     989720 bytes,    9455456 total
> 06.11.2012 10:48:31 - age   5:    1837168 bytes,   11292624 total
> 06.11.2012 10:48:31 - age   6:     447072 bytes,   11739696 total
> 06.11.2012 10:48:31 - age   7:     868304 bytes,   12608000 total
> 06.11.2012 10:48:31 - age   8:    1673520 bytes,   14281520 total
> 06.11.2012 10:48:31 - age   9:    3109384 bytes,   17390904 total
> 06.11.2012 10:48:31 - age  10:    1724424 bytes,   19115328 total
> 06.11.2012 10:48:31 - age  11:    1206352 bytes,   20321680 total
> 06.11.2012 10:48:31 - age  12:     908944 bytes,   21230624 total
> 06.11.2012 10:48:31 - age  13:    1772568 bytes,   23003192 total
> 06.11.2012 10:48:31 - age  14:    1310648 bytes,   24313840 total
> 06.11.2012 10:48:31 - age  15:     867560 bytes,   25181400 total
> 06.11.2012 10:48:31 : 564361K->30541K(655360K), 0.0292050 secs] 2026034K->1493398K(3125248K), 0.0293500 secs] [Times: user=0.21 sys=0.00, real=0.03 secs]
> 06.11.2012 10:48:31 Heap after GC invocations=913 (full 39):
> 06.11.2012 10:48:31  par new generation   total 655360K, used 30541K [0x0000000707c00000, 0x0000000737c00000, 0x0000000737c00000)
> 06.11.2012 10:48:31   eden space 524288K,   0% used [0x0000000707c00000, 0x0000000707c00000, 0x0000000727c00000)
> 06.11.2012 10:48:31   from space 131072K,  23% used [0x0000000727c00000, 0x00000007299d35f0, 0x000000072fc00000)
> 06.11.2012 10:48:31   to   space 131072K,   0% used [0x000000072fc00000, 0x000000072fc00000, 0x0000000737c00000)
> 06.11.2012 10:48:31  concurrent mark-sweep generation total 2469888K, used 1462856K [0x0000000737c00000, 0x00000007ce800000, 0x00000007ce800000)
> 06.11.2012 10:48:31  concurrent-mark-sweep perm gen total 811008K, used 746784K [0x00000007ce800000, 0x0000000800000000, 0x0000000800000000)
> 06.11.2012 10:48:31 }
> 
> Since neither tenured nor perm are nearly full I don't see a reason for this CMS. After some time CMS happens very frequently, multiple times per minute until finally it runs more or less continuously and the JVM needs to be restarted.
> 
> JVM flags are:
> 
> argv[0]: /opt/java/jdk1.6.0_35/bin/java
> ... application system property ...
> argv[2]: -server
> argv[3]: -Dsun.rmi.dgc.client.gcInterval=28800000
> ... application system property ...
> argv[5]: -XX:+UseParNewGC
> argv[6]: -XX:ParallelGCThreads=8
> argv[7]: -XX:+UseConcMarkSweepGC
> argv[8]: -XX:SurvivorRatio=4
> argv[9]: -XX:+CMSClassUnloadingEnabled
> argv[10]: -XX:CMSInitiatingOccupancyFraction=80
> argv[11]: -XX:+UseCMSInitiatingOccupancyOnly
> argv[12]: -Dsun.reflect.noInflation=true
> argv[13]: -XX:+TraceClassLoading
> argv[14]: -verbose:gc
> argv[15]: -XX:+PrintGCApplicationConcurrentTime
> argv[16]: -XX:+PrintGCApplicationStoppedTime
> argv[17]: -XX:+PrintGCTimeStamps
> argv[18]: -XX:+PrintGCDetails
> argv[19]: -XX:+PrintHeapAtGC
> argv[20]: -XX:+PrintTenuringDistribution
> argv[21]: -Xms3052m
> argv[22]: -Xmx3052m
> argv[23]: -XX:PermSize=792m
> argv[24]: -XX:MaxPermSize=792m
> argv[25]: -XX:NewSize=640m
> argv[26]: -XX:MaxNewSize=640m
> ... application system properties ...
> argv[38]: -Dcom.sun.management.jmxremote
> argv[39]: -Dcom.sun.management.jmxremote.port=1090
> argv[40]: -Dcom.sun.management.jmxremote.ssl=false
> argv[41]: -Dcom.sun.management.jmxremote.authenticate=true
> argv[42]: -Dcom.sun.management.jmxremote.password.file=/.../jmxremote.password
> argv[43]: -Dcom.sun.management.jmxremote.access.file=/.../jmxremote.access
> argv[44]: -XX:-UseBiasedLocking
> argv[45]: -XX:-EliminateLocks
> argv[46]: -XX:-DoEscapeAnalysis
> 
> - There are no messages about promotion failures or concurrent mode failures in the logs
> 
> - System.gc() would produce different log messages
> 
> - DGC would not run in intervals that get shorter and shorter down to seconds
> 
> - perm is far from being full
> 
> - tenured is well below the Occupancy Fraction (always below 60%)
> 
> How can we find out the CMS cause here?
> 
> Note: args 44-46 are there because of historical reasons (load test results). Even if for current JVM releases it might be better to remove them, I don't see how they would explain frequent CMS runs.
> 
> Thanks for any hint!
> 
> Regards,
> 
> Rainer



More information about the hotspot-gc-dev mailing list