发版 20 台实例,每台间隔 10 秒重启,到第 5 台时剩余实例 CPU 到 90%,TP99 从 40ms 涨到 4 秒,连接池排队。乍看像缓存或者权限的锅,追下去往往不是。

# 重启前先调 /warmup,再摘流 30 秒
sleep 30 && systemctl restart app

追下去是这么回事:每重启一台,它的本地缓存就清空,流量转到还没重启的实例,那些实例缓存还在但连接数被打满。间隔太短,预热还没完成下一台又开始。

「滚动重启缓存失效」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,重启前先调预热接口把热点 key 装回本地;分批重启 每批结束等两分钟再下一批;重启期间先摘流 让连接平滑迁移。

验收就看一点,同样重启 20 台,CPU 峰值 55%,TP99 维持在 80ms 以内,没有连接池排队。

作者 9823189