你们线上选的是什么垃圾收集器?为什么这么选,业务最关注哪些 GC 指标?
我的判断
收集器按业务延迟目标、堆大小和吞吐选择;对常规服务我会先用 G1 建基线,大堆且停顿要求严格时再评估 ZGC。
例如 4~16GB 堆、接口希望 P99 稳定在几百毫秒内,我会先用 JDK 默认的 G1,减少自定义参数。几十 GB 以上堆且业务对停顿极敏感,会在同样流量下评估 ZGC,但也接受它更高的并发 CPU 和内存开销。离线吞吐任务则可能更关心总处理时间,而不是每次停顿。
业务侧我主要看 GC 是否真的影响用户请求:
- 停顿时间和接口 P99 是否同一时刻抬升;
- 分配速率、Young GC 频率和晋升速率;
- Old 区占用趋势、Mixed/Full GC 次数;
- GC CPU 占比和应用有效吞吐。
选型会用生产流量回放和故障场景验证,观察发布后预热、流量峰值和大对象分配。只拿平均暂停或网上一组参数做决定,通常会忽略本业务对象生命周期。