堆的大小不会自动扩容了

2023-03-29 10:02:13 +08:00
 cmai

JDK1.8 ,当我指定 SurvivorRatio 时,需要关闭 UseAdaptiveSizePolicy , 而当我关闭 UseAdaptiveSizePolicy ,堆的大小就固定下来了,除了更换垃圾收集器,还有别的办法解决吗?

 -Xmn1800m -Xms3000M -Xmx7168m -Xloggc:/data/logs/gc.log -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy -Dserver.port=80
2115 次点击
所在节点    程序员
10 条回复
xhaiben
2023-03-29 10:23:52 +08:00
没明白是什么意思,自动扩容是指想让年轻代的堆大小自动扩容吗? 如果是用的默认的 G1 的话,并不应该设置 SurvivorRatio 和 UseAdaptiveSizePolicy ,G1 有自己的参数
cmai
2023-03-29 10:46:47 +08:00
@xhaiben

JDK8 的默认收集器不是 G1 ,通过 jinfo 命令可以看到用的是-XX:+UseParallelGC , 而 UseParallelGC 默认会打开 UseAdaptiveSizePolicy , 当开启了自适应策略的时候,出现过很多次它把 from 和 to 区的大小调整的只有 1M , 导致老年代堆积的很快,新生代的只要回收存活就会到老年代
cmai
2023-03-29 10:48:07 +08:00
所以我们需要让它不去更改 from 和 to 区的 1:8 的比例, 所以强制指定了 SurvivorRatio , 而指定了 SurvivorRatio 的同时需要关闭掉 UseAdaptiveSizePolicy , 否则不会生效 ,当我关闭 UseAdaptiveSizePolicy 的, 他不会再去调整老年代的大小了
cmai
2023-03-29 10:49:31 +08:00
也就是说, 他的堆在启动时就固定为了 -Xms 指定的 3000M , 即使老年代满了,频繁 full gc , 他也不会去扩容
cmai
2023-03-29 10:58:46 +08:00
或者大家有什么办法能让 from 、to 和 Eden 不会低于 1:1:8 的比例也可以
wccc
2023-03-29 11:10:14 +08:00
可以说说 为什么不更换 g1 的理由吗
cmai
2023-03-29 11:25:22 +08:00
@wccc 领导决定的,可能觉得试错成本很高吧,我们现在手里运维了大大小小一百多个应用, 毕竟没有人用过其他的收集器
xhaiben
2023-03-29 11:54:02 +08:00
ParallelGC 的优点就是并行和自适应调节。 如果自适应调节已经不满足你们的场景了,是不是该考虑换了。。做好测试灰度,风险应该不高。
xiaohundun
2023-03-29 13:58:26 +08:00
不换不行喽
cmai
2023-03-29 15:05:25 +08:00
暂时告一段落,换 g1 了

-Xmx3328m -Xloggc:/data/logs/gc.log -XX:+UseG1GC

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/928056

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX