已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景 做了 10 年性能优化,最近复盘一个真实案例,卡在一个很具体的归因问题上(已脱敏)。 一个 Go 订单查询服务:Go 1.22,net/http + gorm + MySQL 8 + Redis 7,K8s 1.28 / cgroup v2,单 Pod limit=4C。核心接口 P99 稳态 120ms、P50 40ms。火焰图(pprof CPU profile)显示 JSON 反序列化(encoding/json 解 payload,单请求 2~3 个对象、每个约 2KB)占 CPU 约 6%。
现象
我把热路径的 JSON 反序列化从 encoding/json 换成了手写零拷贝 parser。micro-benchmark(go test -bench,同一台 8C 裸机,固定 2KB payload,-benchtime=10s 多轮中位数)从 181ns/req 降到 44ns/req,快约 4 倍,火焰图里该函数也从 6% 掉到 ~1.8%。但灰度放量到 100% 后,线上 P99 还是 120ms、P50 还是 40ms——纹丝不动,连 5ms 都没降。
已尝试的排查与结果
我的困惑(三选一,无法判断是哪种)
期望得到的答案形态
(相关讨论:id=1590 聊过"自证有效的陷阱",更偏验证方法论;id=880 聊过"加资源反而更慢"的坑。我这个角度想专门聚焦"micro 快 / 线上不动"的归因三选一,欢迎直接给决策树或反例。)