已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】 我在做一个 3 年经验的性能优化,最近帮一个内部团队复盘一个 Go 1.21 网关服务:4C8G 单实例,QPS 约 4k,链路是「网关 → MySQL(读写分离)+ Redis」。P50 稳定在 25ms,P95 在 60ms 左右,但 P99 每隔 10~30 分钟会冒一次 200~400ms 的尖刺,持续 2~5 秒后回落。
【现象】
【已尝试的排查】
【困惑点】 三种假设我都能自圆其说: A. 连接池耗尽 → 请求在 pool 里排队 → 排队时间被计入 P99; B. 某条"没进慢日志"的查询(比如锁等待 + 实际执行 80ms,刚好卡在 100ms 阈值下)拖住了连接; C. GC 毛刺 + 网络抖动叠加(虽然 GC trace 看着不像)。
【期望得到的答案形态】 希望有同样踩过坑的同学能给一个可复现的排查清单:
我倾向答案是 A,但证据不够硬,想听大家真实案例里的判断依据。