先给结论:访问量突增期间,如果所有动态请求一起变慢、静态资源也慢、但错误类型以超时和 5xx 为主,优先怀疑资源压力;如果只有某一类 URL 或某个路径稳定报错、其他资源正常,即使流量已经回落问题依旧,优先怀疑配置错误。两者的分界不在“慢了多少”,而在“慢的范围是否随流量走、恢复后是否留下痕迹”。
假设某个内容站做活动推广,半小时内并发访问明显高于平日。运维先看到的是页面加载速度测试里首字节时间从常态跳到数秒,于是加机器。加完之后一部分页面恢复,另一部分仍然报 502。这个情境的关键不是加机器对不对,而是加机器之后“哪些恢复了、哪些没恢复”本身就是判据。
资源压力的典型表现是:受影响面广、与流量曲线同起同落、扩容或限流后明显缓解。配置错误的典型表现是:受影响面窄且固定、与流量曲线不同步、扩容后依旧存在,甚至流量回落后仍稳定复现。把这两组特征分开记录,比反复跑同一份测试更有用。
访问量突增时,先按 URL 类型分组看加载速度测试结果,而不是只看整页总耗时。可以粗略分成三类:HTML 文档、静态资源(CSS、JS、图片)、接口或动态查询。分组之后观察三件事。
这里要避免一个常见误判:把“流量高”直接当成原因。流量高只是放大了既有瓶颈,它不解释为什么偏偏是这一组 URL。如果某个路径在低流量时段也偶发同样的错误,那它从一开始就更可能是配置问题,只是被突增流量推到了台面上。
这是区分两者最省事的一步。等访问量回落到平日水平后,再跑一次同样的页面加载速度测试。如果各项指标随流量一起恢复正常,资源压力的解释成立;如果某个错误仍然稳定出现,配置错误的解释更站得住。
需要留意的是,回落之后“看起来正常”也可能掩盖问题,因为触发条件可能依赖特定参数、特定来源或特定缓存状态。所以回落后的复测要尽量复现原来的请求形态,而不是只测首页。一个实际动作是:保留突增期间出错的具体 URL 和请求头,回落之后原样重放。重放结果会直接决定下一步是继续扩容,还是转去核对配置。
错误码本身能压缩排查范围,但不能单独定论。可以按下面的方向读:
这些只是方向,不是判据。比如 5xx 也可能来自配置写错导致上游地址无效;4xx 也可能因为突增流量打到了未预热的新节点。所以错误类型要和前两步的范围、回落表现一起看,三者一致时结论才比较稳。
把上面的线索整理成动作顺序,避免在突增期间同时改多个变量:
第二步的结果会直接改变第三步的侧重点:如果扩容后只有静态资源恢复、接口依旧报错,那么第三步的重放就应优先针对接口,而不是整页。反过来,如果扩容后全线恢复,第三步就应重点确认回落后的容量余量,防止下次突增重演。
最后提醒一个容易忽略的前提:突增期间测到的数据本身可能失真,测试节点自己也可能被限速或排队。所以判断时应以服务端日志和错误类型为主、以外部测试为辅,两者不一致时先信服务端记录。把范围、回落表现、错误类型三条线索对齐,资源压力与配置错误通常就能分开,后续动作也不会互相打架。