从症状到指标
当你只看吞吐时,GC 可能“看起来没问题”;一旦看 p99,就会发现 stop-the-world 和 assist 在放大尾延迟。
预算化方法
- 先定义延迟预算:例如 p99 < 80ms。
- 反推可接受 GC 时间占比。
- 约束对象分配速率和堆增长上限。
调优抓手
- 降低瞬时分配:对象复用、批量编码。
- 控制堆目标:结合
GOMEMLIMIT与容器 limit。 - 拆分热点路径:让大对象远离高频请求路径。
必看图表
- GC pause 分位数。
- alloc rate 与 mutator utilization。
- heap goal 与实际 heap 的偏差。
小结
GC 调优不是“追求最少回收”,而是“在业务延迟预算内稳定运行”。预算先行,参数才有方向。