curl -s localhost:8080/actuator/metrics/cache.gets | jq '.measurements' kubectl scale deploy/api --replicas=8
4 台机器时 P99 240 毫秒,扩到 8 台后涨到 520 毫秒,QPS 只多了 15%。本地缓存命中率从 92% 掉到 61%,每个实例的缓存都在重新预热。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,每台机器各存一份本地缓存,机器越多单机承担的比例越低,同一份数据被重复加载。扩容瞬间缓存全是空的,请求打到数据库,数据库先到瓶颈。连接池按 4 台配的,8 台一起抢。
这次卡住的地方就在「扩容后性能下降」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
处理上按这个顺序:扩容前先确认缓存是本地还是集中式;本地缓存改成分片或集中缓存 避免重复预热;扩容分批做 一次加一台 观察命中率恢复再继续;数据库连接总上限按实例数重新分配。
改完只确认一件事:扩到 8 台后 QPS 接近线性增长,P99 回落到 260 毫秒以内。
