目标
大堆服务在负载下出现长时间 GC 停顿,默认分区大小导致分区数偏少。本配方先开启 GC 日志并查看停顿统计,再显式设置区大小与停顿目标,使 4GB 堆得到健康的分区数并使停顿趋近目标;提醒超过半个区的大对象(humongous)会造成额外停顿,需关注。
步骤要点
- 开启 GC 日志并查看停顿与撤离统计。
- 显式设置区大小与最大停顿目标。
- 关注 humongous 分配并降低最大对象预期。
- 放宽过于激进的停顿目标以免 GC 更频繁。
java -Xlog:gc*:file=gc.log:time,uptime -XX:+UseG1GC -jar app.jar
排错提示
- 停顿仍长需检查 humongous 分配。
- 目标过激进会增加 GC 频率、降低吞吐。
- 调优依分配模式与堆大小而异。
适用边界
- 不能修复泄漏或对象高频创建。
- 区大小与堆大小相关。