站点运营

站点运营:5xx 错誤自查,別让蜘蛛和訪客一起被挡在门外

5xx 错誤不像 404 那样只影响單個地址,它會在同一時間波及大量請求。本文從資料库连接、後端進程、缓存回源、磁盘寫入几個常见来源入手,给出一份可直接执行的自查清單,並說明监控阈值、告警内容和處理顺序该怎么安排,帮助把错誤率控制在可观察、可解释的范围内。

站点运营

站点运营:5xx 错誤自查,別让蜘蛛和訪客一起被挡在门外

404 的意思是“這里没有内容”,5xx 的意思是“我現在處理不了”。對訪客来说,前者還能退回上一頁換個入口,後者只能看到一個空白或错誤提示;對搜尋引擎蜘蛛来说,反复撞上 5xx 的地址,抓取节奏會被打乱,原本稳定的訪問時間表也會變得不确定。所以 5xx 值得從站点运营的角度單獨盯一條线。

先分清是全局故障還是局部故障

打開监控面板之前,先做一個简單判断:同一時間,首頁、列表頁、詳情頁、接口地址分別返回什么狀態碼。如果全部 5xx,多半是服務進程、資料库连接或網關层面的問题;如果只有某一類頁面 5xx,通常和该頁面的模板、查询语句或依赖的第三方接口有關。這個判断能省掉大量排查時間。

常见来源與對應自查点

資料库连接數與慢查询

连接池被占满是 5xx 的常见原因。自查时看三個數:连接池上限、峰值並發连接數、慢查询日誌里持續超過阈值的语句。列表頁或标簽聚合頁如果没有走缓存,一條没有索引的查询就足以拖住整條鏈路。

後端進程與超时配置

進程數少、單個請求又慢,請求就會排队,排在後面的直接超时。检查 PHP-FPM 或應用容器的進程上限、最大执行時間、網關的讀取超时,是否存在“應用還在算,網關已经放弃”的错配。

缓存失效後的回源洪峰

缓存整层過期、重啟後缓存為空、某次改版換了缓存键,都會让原本被挡住的請求在同一秒钟涌回源站。表現往往很整齐:整点或重啟後几分钟内 5xx 陡增,之後自己恢复。這種情况要把缓存预热和過期時間打散寫進流程,而不是等它自己好。

磁盘寫满與日誌暴涨

日誌目錄寫满、临时文件堆积、會话文件没有清理,都會让寫入失敗進而返回 5xx。這類問题排查起来最快,也最容易被忽略,值得放進日常巡检。

可以直接照着做的自查清單

  1. 在监控里單獨建立 5xx 曲线,按狀態碼分组,而不是只看“可用性”一個數字。
  2. 確認错誤日誌里有足够上下文:請求地址、上游耗时、異常堆栈,至少保留其中两項。
  3. 给關键頁面准备降級方案:讀缓存、静態兜底或简短提示,而不是直接抛出错誤頁。
  4. 区分 5xx 與 404、403 的統計口径,避免混在一起導致判断失真。
  5. 限制重试次數與退避時間,防止上游抖動被自己的重试放大成雪崩。
  6. 把第三方接口調用加上超时和熔断,避免外部拖垮内部。

监控與告警的几條经驗

固定阈值告警容易在夜里被忽略,比例告警更實用,比如“過去五分钟 5xx 占全部請求的比例超過 1%”。告警内容里带上最近一次變更记錄,往往能直接指向原因:刚發過版本、刚調整過缓存、刚做過後台批處理。没有變更记錄的告警,排查時間通常要翻倍。

處理顺序建议

先止血再定位:先通過重啟、扩容、切換备用节点把错誤率压下去,再回头翻日誌找根因。反過来做,往往一邊排查一邊繼續报错。事後把這次的原因、影响范围、恢复動作寫進记錄,下次同類問题會快很多。

5xx 不需要被彻底消灭,但需要被看见、被分類、被记錄。對站点运营来说,稳定返回 200 的頁面,才是後續所有讨论的前提。