404错误排查:访问量突增期间怎样区分资源压力与配置错误

📍 WDQWDWQD987AAAAA:216.73.217.113
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /79c8faa5af60.html
📄

404错误排查:访问量突增期间怎样区分资源压力与配置错误

先看404的分布形态,而不是先看总量。访问量突增时,如果404集中在少数旧路径、且这些路径此前一直正常,更像配置或发布变更;如果404分散在大量随机路径、并伴随5xx和响应时间上升,更像资源压力。两者可以同时存在,所以需要按时间切片和路径分组分别判断。

先确定这次突增的性质:真实流量还是抓取放大

资源压力和配置错误的分界,往往在突增来源上就已经分出。真实用户流量增长会带来更多站内跳转和正常页面访问,404占比通常变化不大;抓取或扫描类流量放大时,404占比会明显上升,而且大量请求落在不存在的路径上。这一步不需要精确归因,只需要看同一时间窗内正常页面请求与404请求的比例是否同步变化。

如果404增幅远高于正常页面增幅,优先怀疑两类情况:一是站点结构或链接规则被改动,二是外部大量请求指向了不存在的旧地址。此时先不要急着调服务器资源,因为加机器不会让错误路径变成有效页面。

条件一:404集中在少数路径,按配置错误处理

当404集中在可枚举的少数路径上,并且这些路径在突增前可以正常访问,应把它当作配置或发布问题,而不是压力问题。典型证据包括:同一路径在突增开始的时间点前后返回码发生变化;多个路径共享同一前缀或同一跳转规则;错误只出现在某一类URL形态上。

实际动作是先取一份代表性样本,把每条路径在突增前后的返回码、最终跳转目标和响应体长度列出来。如果同一路径从200变成404,且服务器资源指标没有同步恶化,就可以基本排除资源压力。此时下一步应检查最近的发布记录、重写规则和跳转配置,而不是扩容。

需要留意的例外是缓存。部分路径的404可能来自缓存中保存的错误响应,源站本身已经恢复。这种情况下清缓存或等待缓存过期后返回码会自行恢复,不能据此认定配置已修好,仍要核对源站的实际返回。

条件二:404分散且伴随5xx,按资源压力处理

当404分散在大量不同路径上,同时出现5xx、响应时间上升、连接被拒或超时,应优先按资源压力处理。这里的判断依据不是404本身,而是404与5xx、延迟的同向变化。资源紧张时,部分请求可能因为超时、连接池耗尽或上游返回异常而被记录成404或类似错误,路径分布因此变得随机。

实际动作是先看资源侧的时间序列:CPU、内存、连接数、上游响应时间。如果这些指标在404上升的同一时间段内同步恶化,先做限流、扩容或降级,再观察404是否随之回落。回落说明压力是主因;不回落说明还有独立的配置问题,需要回到条件一的方法继续排查。

这里有一个容易误判的点:请求量、抓取量或某项统计归零,并不能单独证明处理正确。它也可能是流量被限流、被拦截,或者统计口径变化造成的。要结合正常页面请求量一起看,才能判断是问题解决还是流量被挡掉了。

用时间切片把两种原因分开

把突增窗口切成若干短时间段,分别统计404数量、404涉及的独立路径数、5xx数量和平均响应时间。可以按下面的顺序读这组数据:

  1. 404与5xx、延迟同步上升,且独立路径数很多——先按资源压力处理。
  2. 404上升但5xx和延迟平稳,且独立路径数很少——先按配置错误处理。
  3. 404上升、独立路径数多,但5xx和延迟平稳——更可能是外部请求指向了不存在的地址,应检查链接来源和跳转规则,而不是扩容。
  4. 两类信号同时出现——先处理压力,再复查配置,因为压力会掩盖配置问题的真实形态。

假设某站点在突增期间404从每小时数十条升到数千条,同时5xx从接近零升到数百条,平均响应时间翻倍。按上面的顺序,先限流并扩容,观察一小时后5xx回落、404降到突增前的数倍但仍高于基线。此时剩下的404就属于条件一,应继续核对具体路径的返回码变化,而不是继续加资源。

处理顺序对下一步的影响

顺序选错会浪费一轮排查。先扩容再看配置,代价是资源成本上升、问题被暂时掩盖;先改配置再看压力,代价是可能改错规则、把正常路径也弄坏。一个稳妥的做法是:先用只读方式采集证据,不立即改动线上配置;确认404的路径分布和时间分布之后,再决定先动资源还是先动规则。

无论先动哪一边,都要保留改动前的返回码样本和规则快照,这样在结果不符合预期时可以回退。若404来自外部请求指向不存在的地址,还需要区分这是短期扫描还是长期失效链接,前者通常不需要为它单独建页面,后者才值得做跳转或补内容。判断依据是这些路径是否曾经存在、是否有站内或站外链接指向它们,而不是单看请求量大小。

图1 图2

nginx