JDK1.8 ,当我指定 SurvivorRatio 时,需要关闭 UseAdaptiveSizePolicy , 而当我关闭 UseAdaptiveSizePolicy ,堆的大小就固定下来了,除了更换垃圾收集器,还有别的办法解决吗?
-Xmn1800m -Xms3000M -Xmx7168m -Xloggc:/data/logs/gc.log -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy -Dserver.port=80
1
xhaiben 2023-03-29 10:23:52 +08:00
没明白是什么意思,自动扩容是指想让年轻代的堆大小自动扩容吗? 如果是用的默认的 G1 的话,并不应该设置 SurvivorRatio 和 UseAdaptiveSizePolicy ,G1 有自己的参数
|
2
cmai OP @xhaiben
JDK8 的默认收集器不是 G1 ,通过 jinfo 命令可以看到用的是-XX:+UseParallelGC , 而 UseParallelGC 默认会打开 UseAdaptiveSizePolicy , 当开启了自适应策略的时候,出现过很多次它把 from 和 to 区的大小调整的只有 1M , 导致老年代堆积的很快,新生代的只要回收存活就会到老年代 |
3
cmai OP 所以我们需要让它不去更改 from 和 to 区的 1:8 的比例, 所以强制指定了 SurvivorRatio , 而指定了 SurvivorRatio 的同时需要关闭掉 UseAdaptiveSizePolicy , 否则不会生效 ,当我关闭 UseAdaptiveSizePolicy 的, 他不会再去调整老年代的大小了
|
4
cmai OP 也就是说, 他的堆在启动时就固定为了 -Xms 指定的 3000M , 即使老年代满了,频繁 full gc , 他也不会去扩容
|
5
cmai OP 或者大家有什么办法能让 from 、to 和 Eden 不会低于 1:1:8 的比例也可以
|
6
wccc 2023-03-29 11:10:14 +08:00
可以说说 为什么不更换 g1 的理由吗
|
8
xhaiben 2023-03-29 11:54:02 +08:00
ParallelGC 的优点就是并行和自适应调节。 如果自适应调节已经不满足你们的场景了,是不是该考虑换了。。做好测试灰度,风险应该不高。
|
9
xiaohundun 2023-03-29 13:58:26 +08:00
不换不行喽
|
10
cmai OP 暂时告一段落,换 g1 了
-Xmx3328m -Xloggc:/data/logs/gc.log -XX:+UseG1GC |