以下是运行WebApp的Tomcat JVM的JVM参数:
-Xmx14G
-Xms14G
-XX:PermSize=300M
-XX:MaxPermSize=300M
-Xss256K
-XX:+HeapDumpOnOutOfMemoryError
-XX:NewRatio=3
-verbose:gc
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+CMSParallelRemarkEnabled
-XX:+ParallelRefProcEnabled
-XX:+ScavengeBeforeFullGC
-XX:+CMSScavengeBeforeRemark
在负载下,系统显示以下“问题”:
Young(伊甸园)空间在不到1分钟的时间内快速充满,导致GC大约为3.5GB。我认为这是由新比率= 3. 我的问题引起的,如果这个数量减少到1,从而创建了50:50的堆并增加了Eden GC之间的时间,还是有更好的选择?
总堆使用率从未达到14GB。它永远不会超过总共约6GB。考虑到启动参数,我预计完整GC为75%,但这远远低于10.5GB(或者总数的75%)我的问题,这是预期的还是我忽略了什么?
问题二的可能解决方案:
旧空间正在缓慢填充并从4GB稳步增加。 Young Space正在快速填充到3.5GB然后GC发生,堆降到4GB级别。所以因为Old Space需要很长时间才能完成,并且Young GC如此频繁,所以看起来14GB的堆永远不会被使用,因为Old需要这么长时间才能增加。在这种情况下,我应该为Young分配更多空间吗?