先看一个可证伪的分界:如果死链响应随并发升高而增多、并发回落后自动消失,优先怀疑资源压力;如果低并发下仍稳定返回同一状态码,且换路径、换时段都一样,优先怀疑配置错误。假设情境:某内容站在一次推广后访问量在半小时内翻了几倍,监控里404和超时同时上升,运维重启应用后短暂恢复,随后又出现。这个情境的关键不是“量大了”,而是恢复是否与负载同步。
访问量突增时,资源压力和配置错误都会表现为死链增多,但它们的证据链不同。资源压力的特征是:同一批URL在低峰期正常,高峰期失败;失败集中在需要动态处理、数据库查询或上游调用的路径;并发下降后自行恢复。配置错误的特征是:失败与并发无稳定关系,低峰期也复现;同一规则影响的URL集合固定;修改配置后行为立刻改变,且不随流量波动。把这两组特征写成两列,逐条打勾,比凭感觉归因更可靠。
一个实际动作是:在流量仍高时,用低并发单独请求几条已知会失败的URL,记录状态码和响应时间。如果低并发下这些URL正常返回,说明单条链路本身没坏,问题更可能在并发处理环节;如果低并发下依然失败,就应转向配置与规则排查。这个动作的结果直接决定下一步是查容量还是查规则,避免在错误方向上重启服务。
资源压力通常留下与时间相关的痕迹。可以观察:失败是否集中在流量峰值区间;同一URL在峰值与低谷的状态码是否不同;应用日志里是否出现连接池耗尽、队列等待、上游超时;进程或容器的CPU、内存、文件描述符是否接近上限。这些信号同时出现时,资源压力的解释力更强。
但要注意,请求量或抓取量归零、错误率突然下降,不能单独证明处理正确。它也可能是爬虫主动降速、缓存命中、上游恢复或监控采样变化造成的。要证明是资源压力,最好能复现:在受控的低并发下请求同一批URL,若恢复正常,再逐步提高并发观察失败是否重现。若无法复现,就不能把“重启后好了”当作结论。
配置错误更稳定,也更“挑URL”。常见来源包括:重写规则把带参数的URL导向不存在的路径;大小写或结尾斜杠处理不一致;CDN或反向代理的缓存键把不同内容混在一起; robots.txt 或站点地图中的地址与实际路由不一致。这里要强调:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,所以不能因为提交过站点地图就认定死链一定来自抓取配置。
判断配置错误的一个有效动作是:取一组失败URL,去掉查询参数、统一大小写、补上或去掉结尾斜杠,分别请求,记录状态码变化。如果状态码随URL形态规律性变化,说明问题在规则映射而非容量。这个结果会影响下一步:应修改重写或规范化规则,而不是扩容。
回到开头的假设情境。第一步,在高峰时段用低并发请求失败URL:若正常,标记为资源压力候选;若仍失败,标记为配置候选。第二步,对配置候选做URL形态对照请求,观察状态码是否随参数、大小写、斜杠变化。第三步,对资源候选检查连接池、队列和上游超时日志,并在低谷期复测同一批URL。第四步,只对证据指向的一侧动手:配置侧改规则后立即复测同一批URL;资源侧调整容量或限流后,在相似并发下复测,而不是只看重启后的短暂平静。
这个顺序的价值在于:每一步的结果都会排除一类解释。若低并发正常、高峰失败,就不该先去改重写规则;若低并发也失败且URL形态敏感,就不该先扩容。两者都成立时,说明可能同时存在,此时应先用配置侧修复稳定失败的那部分,再用资源侧处理随并发波动的那部分,分开验证,避免互相掩盖。
还有几类情况会让判断变复杂。缓存可能让同一URL在不同节点返回不同结果,需要按节点分别请求;HTTPS 不保证安全无漏洞或排名,也不能作为死链原因的推断依据;不同搜索引擎对同一规则的支持情况不同,涉及抓取与索引时要分别核查。最后,不要把“错误率下降”直接等同于“已修复”,要确认下降发生在同一批URL、同一并发条件和同一时段,否则只是换了观察窗口。