搜尋抓取

响應慢與超时:蜘蛛抓取时在等你多久

蜘蛛抓取一個頁面,時間主要花在连接建立、TTFB 和正文传輸三段。响應慢或超时不一定會立刻出問题,但會持續拉低抓取节奏,牵连同一主机下的其他 URL。本文拆解各环节耗时、超时與断连之後蜘蛛的處理逻辑,以及如何用日誌定位慢响應、按優先級做優化。

搜尋抓取

响應慢與超时:蜘蛛抓取时在等你多久

蜘蛛抓取一個 URL,從建立连接到拿到 HTML,中間要跨過網絡、服務器排队、應用處理和資料库查询几道环节。任何一环變慢,單次抓取的耗时都會變長;慢到超過蜘蛛的等待阈值,這次抓取就直接作废。

一次抓取的耗时都花在哪

從蜘蛛的视角看,時間大致分三段:连接建立(DNS、TCP、TLS)、等待首字节(TTFB)、接收正文。前两段偏網絡和服務器层,第三段取决于頁面体积和带宽。真正容易被忽略的是 TTFB,它包含服務器排队和應用生成頁面的全部時間。

  • 连接阶段慢:多半是线路、DNS 解析或證书握手的問题。
  • TTFB 高:常见于後端查询慢、鎖等待、模板渲染重、缓存未命中。
  • 传輸阶段慢:HTML 体积大、下载资源多、出口带宽被占满。

超时與断连之後會發生什么

蜘蛛對單次請求有等待上限,超過就不再等。连接被中断、返回不完整的 HTML,通常不會记成一次有效抓取,而是算一次失敗。失敗次數多了,常见後果是:

  • 该 URL 的抓取频率被下調,回爬間隔拉長。
  • 同目錄、同主机的其他 URL 也會受牵连,整体节奏放缓。
  • 如果失敗集中在某台机器或某個接口,相關頁面可能長期停在舊快照。

要注意,慢和挂是两種不同的信号。持續返回 200 但每次都要十几秒,比偶發一次 503 更容易拖垮整体抓取效率,因為它不會触發明顯的告警。

慢响應如何拉低整站抓取量

蜘蛛的抓取同时受並發和配額约束。假设同一時間能開 N 個连接,單頁耗时從 0.3 秒變成 3 秒,相同時間内能抓完的 URL 就少了一個數量級。表現上就是:日誌里蜘蛛来得挺勤,但每天覆盖的 URL 數一直上不去,深處頁面迟迟進不了队列。

反過来,响應稳定在几百毫秒,即使站点規模不小,蜘蛛也更容易把有限的容量用在發現和確認新 URL 上,而不是反复重试同一批慢頁面。

怎么观察自己的响應表現

  1. 按蜘蛛 UA 過滤訪問日誌,統計响應時間分布,別只看平均值,重点看 P95、P99。
  2. 把 5xx、超时、连接重置單獨計數,和時間点對齐,看是否集中在某個时段或某台机器。
  3. 区分動態頁和静態頁,很多站点慢的是列表頁和搜尋頁,首頁反而很快。
  4. 核對 CDN 回源比例,回源率高的时段 TTFB 通常同步變差。

可落地的處理顺序

不必一上来就做大改造,按影响面排優先級更划算:

  • 先降超时率:找出连續报错的接口,能修就修,修不了的先让它返回明确的狀態碼,而不是一直挂着。
  • 再压 TTFB:补缓存、给慢查询加索引、把重渲染的頁面做静態化或预生成。
  • 控制並發:蜘蛛和真實用戶抢同一批资源时,给抓取留出通道,避免高峰互相拖慢。
  • 管住 5xx:短時間大量 5xx 會被当成站点不稳定,回爬节奏恢复起来比降下去慢得多。

不管是靠内鏈、Sitemap 還是其他方式做 URL 發現,最终都要落到服務器能在合理時間内把頁面交出去這一步。發現得再快,交付跟不上,抓取量也不會增長。

抓取效率的下限往往不是“蜘蛛愿不愿意来”,而是“服務器能不能及时把頁面交出去”。稳定性先立住,URL 發現和内鏈優化才有意义。