本文目录#
调优方法论#
- 设定目标:延迟、吞吐或内存;
- 收集数据:GC 日志、JFR、指标;
- 分析问题:分配速率、晋升失败、停顿;
- 制定方案:调整堆、回收器、参数;
- 验证与回滚:压测、灰度、上线;
- 记录与复盘:形成知识库。
关键指标#
- GC 停顿时间、频率、吞吐比;
- 堆使用率(Eden/Survivor/Old)与 Humongous 占比;
- 分配速率、TLAB 使用;
- Safepoint 次数与原因。
调优策略#
- 堆布局:设置
-Xms=-Xmx
、调整新生代比率; - 回收器选择:G1、ZGC、Shenandoah 根据延迟需求;
- 对象分配:减少短命对象、启用逃逸分析;
- 字符串与缓存:启用 String Deduplication、合理缓存大小;
- 监控与告警:Prometheus 指标 + GC 日志采集。
调整示例#
-XX:MaxGCPauseMillis=200
、-XX:InitiatingHeapOccupancyPercent=40
;-XX:+UseStringDeduplication
、-XX:G1MixedGCLiveThresholdPercent=75
;-Xlog:gc*,gc+heap=debug:file=gc.log
。
自检清单#
- 是否基于数据而非猜测调整参数?
- 是否评估新参数对 CPU/内存的影响?
- 是否记录调优前后对比数据并复盘?
参考资料#
- Java HotSpot VM GC 调优指南:https://docs.oracle.com/en/java/javase/17/gctuning/index.html
- GC 日志分析工具 GCViewer:https://github.com/chewiebug/GCViewer
- Google SRE 性能优化经验
本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。