M
M
I have a Java service that appears to ignore the
XX:CMSInitiatingOccupancyFraction flag completely. Here're the GC
related settings:
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintTenuringDistribution
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:CMSInitiatingOccupancyFraction=50
-XX:+UseCMSInitiatingOccupancyOnly
-Xmx2048m -Xms2048m
-XX:NewSize=100m
-XX:MaxNewSize=100m
Despite setting CMSInitiatingOccupancyFraction to 50% and setting
UseCMSInitiatingOccupancyOnly to true, the CMS collector continues to
wait until the tenured generation grows *way* above 50% before it
kicks in.
The reason for 50% threshold is this app being very sensitive to
pauses and I want to avoid pause if at all possible, at the expense of
memory and CPU. However because CMS doesn't start early as it should
(should start at 50% tenured occupancy), I occasionally get YJ
promotions failures and results a STW collection pause, probably due
to fragmentation.
This is JRE1.6.0 on Linux. What's going on??
XX:CMSInitiatingOccupancyFraction flag completely. Here're the GC
related settings:
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintTenuringDistribution
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:CMSInitiatingOccupancyFraction=50
-XX:+UseCMSInitiatingOccupancyOnly
-Xmx2048m -Xms2048m
-XX:NewSize=100m
-XX:MaxNewSize=100m
Despite setting CMSInitiatingOccupancyFraction to 50% and setting
UseCMSInitiatingOccupancyOnly to true, the CMS collector continues to
wait until the tenured generation grows *way* above 50% before it
kicks in.
The reason for 50% threshold is this app being very sensitive to
pauses and I want to avoid pause if at all possible, at the expense of
memory and CPU. However because CMS doesn't start early as it should
(should start at 50% tenured occupancy), I occasionally get YJ
promotions failures and results a STW collection pause, probably due
to fragmentation.
This is JRE1.6.0 on Linux. What's going on??