先给结论:突增期间如果所有动态请求一起变慢、静态文件和健康检查也同步劣化,优先怀疑资源压力;如果只有某一类路径、某个域名或某种请求方法失败,而其他请求仍然稳定,优先怀疑配置错误。判断顺序应是先看失败是否具有选择性,再看资源曲线是否与失败同步,最后用一次受控复现来确认。
假设一次活动带来持续两小时的流量上升。监控里出现两类互相矛盾的信号:总响应时间上升,错误率也上升,但首页静态资源仍能正常返回,只有带查询参数的动态页面大量超时。此时“资源不够”和“配置写错”都能解释部分现象,不能只看总错误率就下结论。
资源压力的典型表现是共享资源被同时消耗:CPU、内存、数据库连接数、带宽或上游接口配额接近上限,受影响范围通常随请求类型扩散。配置错误的典型表现则带有选择性:某个重写规则、缓存键、跨域设置、请求体大小限制或后端地址只在特定条件下触发,其他请求不受影响。
如果突增期间动态请求、静态请求和健康检查同时变慢,且失败率与并发数、连接数或带宽曲线同步抬升,资源压力更可信。此时应记录三个时间点:突增开始、资源指标越过阈值、错误开始出现。三者接近同一时间窗口,才说明压力可能是主因。
但指标归零或错误率下降不能单独证明处理正确。请求量下降、缓存命中改变、上游限流解除、客户端重试减少,都可能让曲线回落。更稳妥的动作是:在压力仍存在时,临时提高一类资源的配额或减少非关键请求,观察失败是否随该资源缓解而下降。若下降只发生在被调整的那类请求上,资源解释得到加强;若所有请求仍按原样失败,应转向配置排查。
配置错误常表现为“同一时间、同一入口、同一类请求”的稳定失败。例如只有带特定参数或特定 Host 的请求返回错误,其他请求正常;或者错误在流量回落后仍然存在。此时资源曲线可能只是伴随现象,不是原因。
可执行的区分动作是构造最小复现:在低峰期用一条与失败请求相同的路径、参数和方法发起请求。如果低峰期仍然失败,配置错误的可能性上升;如果低峰期成功、高峰失败,则更偏向资源竞争或依赖服务限流。这个动作的结果会直接影响下一步:低峰也失败就查规则、后端地址和请求限制;仅高峰失败就查容量、连接池和上游配额。
下面这组检查不依赖单一指标,而是看失败是否具有选择性:
若第 1、4 条成立,配置错误优先;若第 2、3 条成立,资源压力优先。两条同时部分成立时,先处理能稳定复现的那一类,再观察另一类是否随之缓解。
旧内容、旧系统或旧合作关系退出时,常见做法是保留仍然有价值的静态页面和重定向,关闭动态接口。此时突增期间更容易误判:动态接口关闭后,原本由它承担的请求会转向静态层或重定向层,资源曲线和错误类型都会改变。保留部分应明确边界:哪些路径继续由旧系统响应,哪些已交给新入口,哪些只返回重定向。
如果保留的是重定向规则,突增期间要单独观察重定向链是否变长、是否出现循环。若保留的是静态缓存,则要观察缓存命中变化是否把压力转移到源站。退出动作本身会改变证据分布,所以判断资源压力还是配置错误时,应把“哪些部分已退出、哪些仍保留”作为前提写进排查记录,而不是把退出前后的曲线直接对比。
假设某站点在突增时错误率上升,运维先扩容应用实例。扩容后错误率没有下降,因为失败请求都带同一个旧参数,而新实例仍执行相同的参数校验规则。这个动作的结果说明:扩容没有改变选择性失败,配置解释更可信。下一步应改为检查参数校验和重写规则,而不是继续增加实例。
反过来,假设扩容后只有动态请求恢复,静态请求仍慢,则说明动态层存在资源竞争,静态层另有原因。此时应分别处理,而不是把两类失败合并成一个结论。关键不是扩容本身对错,而是扩容后哪类请求发生变化,这个变化决定了下一步查配置还是查容量。
突增期间最有效的准备,是提前给请求分类并保留独立观测:静态、动态、健康检查、重定向各看一组信号。这样当访问量上升时,你能先回答“失败有没有选择性”,再回答“资源是否同步变化”,而不是在总错误率里猜原因。对于准备退出的旧系统,保留部分越少、边界越清楚,突增时的证据就越容易解释;保留部分越多,就越需要为每一类保留路径单独设置观察点,避免把退出带来的流量转移误判成资源压力或配置错误。