404 not found:访问量突增时先查资源压力还是配置错误

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

404 not found:访问量突增时先查资源压力还是配置错误

先看一个可区分信号:如果同一时间只有部分URL返回404,且这些URL集中在某个路由、参数或文件类型上,配置错误的可能性更大;如果几乎所有动态请求都开始超时或返回5xx,同时404数量随之上升,资源压力更值得优先排查。两者会互相伪装,所以不要只看404总量,要把响应码、响应时间和受影响URL的分布放在一起看。

两个解释都成立时,先找分叉证据

访问量突增期间,404 not found 变多有两种常见解释。第一种是资源压力:应用进程、数据库连接或上游服务达到瓶颈,原本能正常解析的路由开始超时,部分请求被降级或中断后返回404。第二种是配置错误:流量触发了新的主机名、路径前缀、重写规则或缓存层,导致请求根本没有到达正确的处理程序。

两种解释都能解释“404变多”,但它们的证据分布不同。资源压力通常伴随响应时间上升、5xx增加、连接池耗尽或队列积压;配置错误通常表现为响应时间正常甚至很快,404集中在特定URL模式,而其他路由完全正常。把这两个方向分开,才能决定下一步是扩容、限流,还是回滚配置。

用响应时间和状态码分布做第一次切分

先取突增时间段内的一小段日志,按分钟统计三类请求:2xx、4xx、5xx,以及每类的平均响应时间。假设某个假设例子中,404从每分钟几十次升到几千次,但平均响应时间没有明显变化,2xx比例也稳定,这时资源压力的解释就变弱,应该优先检查路由和重写规则。

反过来,如果404上升的同时5xx也在上升,响应时间从几百毫秒升到数秒,且受影响的不只是404,连正常页面也开始超时,那么更可能是资源瓶颈。此时直接去改404页面或加跳转,通常不会改善结果,因为请求根本没有被正常处理。

按URL维度抽样,判断是局部还是全局

从404日志中随机抽几十条,按路径、查询参数、User-Agent和来源主机分组。如果这些404几乎都带同一个参数、同一个前缀或同一个Host头,配置错误的概率更高。如果404的路径分布很散,连平时稳定的静态资源也开始404,同时服务器负载很高,资源压力的概率更高。

一个实际动作是:把抽样到的404 URL逐条在低流量环境或维护窗口内直接请求一次,记录状态码和响应时间。如果低流量下同一URL恢复正常,说明配置本身可能没问题,问题更偏向资源压力;如果低流量下仍然404,说明配置或路由规则确实有误。这个动作的结果会直接决定下一步:前者应查容量和依赖,后者应查配置和重写链。

两种做法的取舍条件与代价

选择“先扩容”成立的条件是:404与5xx、超时、连接拒绝同时出现,且受影响URL分散。代价是扩容可能掩盖真正的配置错误,如果配置问题持续存在,扩容只是让更多请求更快地撞上404。

选择“先回滚配置”成立的条件是:404集中在最近变更过的路由、重写规则或缓存层,且响应时间没有明显恶化。代价是回滚可能暂时丢失新功能或新路径,如果实际问题是资源压力,回滚不会降低负载,反而浪费一次变更窗口。

更稳妥的顺序是先用日志做一次切分,再决定动作。若证据指向配置,先回滚或修正规则,然后观察404是否随配置恢复而下降;若证据指向资源,先限流或扩容,然后观察5xx和响应时间是否先恢复。无论哪种,都不要把404总量归零当作唯一成功标准,因为请求结构变化、缓存命中和爬虫行为变化也会影响这个数字。

把404处理与其他信号分开验证

robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录。同样,404数量下降不等于问题已经解决,它可能只是流量回落、缓存命中率上升或监控采样变化。要确认处理是否有效,应同时看正常请求的成功率、响应时间分布和受影响URL是否回到预期状态。

如果站点同时依赖搜索引擎、平台推荐和广告流量,突增来源不同,404的分布也可能不同。广告落地页集中404,通常先查广告参数和落地页配置;自然抓取集中404,通常先查路由和服务器规则。分开看来源,比笼统地统计404总量更能帮助决定下一步。

图1 图2

nginx