我为我的应用程序切换到CMS收集器,应用程序的吞吐量减少了一半。从GC日志中,我发现很少发生轻微的GC(a 10 per second
)。我已经分配了4G
的堆大小。默认情况下,JVM使用非常小的大小(小于40MB
)。我想通过增加年轻人的规模来尝试CMS。你能指点我正确的JVM参数吗?
java version "1.6.0_14"
答案 0 :(得分:4)
您是如何设置-XX:NewRatio
以及哪个JVM版本的?
反正。如果您还要设置-XX:MaxNewSize=size
这是一项功能,或者您还设置了-XX:+UseConcMarkSweepGC
known bug,则可以忽略此项。
答案 1 :(得分:1)
它对我有用:
默认值(Windows上的Java 7 64位):
java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version java version "1.7.0_07" Java(TM) SE Runtime Environment (build 1.7.0_07-b10) Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode) Heap par new generation total 613440K, used 21813K eden space 545344K, 4% used from space 68096K, 0% used to space 68096K, 0% used concurrent mark-sweep generation total 3512768K, used 0K concurrent-mark-sweep perm gen total 21248K, used 2084K
现在指定比率参数(大致相同的结果):
java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:NewRatio=6 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version par new generation total 539264K, used 19174K eden space 479360K, 4% used from space 59904K, 0% used to space 59904K, 0% used concurrent mark-sweep generation total 3595136K, used 0K concurrent-mark-sweep perm gen total 21248K, used 2084K
然后是一个完全不同的新/旧和伊甸园/幸存者比例:
java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version par new generation total 1398144K, used 27965K eden space 699136K, 4% used from space 699008K, 0% used to space 699008K, 0% used concurrent mark-sweep generation total 2097152K, used 0K concurrent-mark-sweep perm gen total 21248K, used 2084K
与Java 6或客户端VM相同(仅具有不同的默认值)。