站点带宽监控每天凌晨 3 点到 4 点打满,正好和蜘蛛抓取高峰重叠,那一个小时里蜘蛛请求的超时率超过 30%,白天却完全正常。

真正麻烦的地方在于,几个原因的现象几乎一样。备份任务和数据库导出都排在 3 点,磁盘和网络同时被占;CDN 日志回传也在同一时段,出口带宽被挤占;抓取高峰叠加日志切割,Nginx 写盘出现瞬时阻塞;定时生成的 sitemap 让蜘蛛在生成期间集中来抓。

先按小时统计蜘蛛超时率

awk '$0~/Googlebot/ && $9>=499{print substr($4,2,14)}' access.log | sort | uniq -c

随后列出该时段的定时任务

crontab -l | grep -E '^0?3|^\*/'

再往下看备份任务的实际耗时与带宽

grep -i backup /var/log/syslog | tail -20

末了把备份错开到抓取低谷并限速

0 5 * * * ionice -c3 rsync -a --bwlimit=8000 /data/ /backup/

恢复的判定其实很直接。备份挪到 5 点并限速后,凌晨的超时率降到 3% 以下,蜘蛛抓取量在同一时段回升四成。

抓取时段由蜘蛛自己决定,能调的是本机的资源占用,把重任务错开比限制蜘蛛更现实。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189