改版上线后每个请求都过一遍鉴权中间件,响应时间从 180ms 涨到 580ms,蜘蛛的超时比例从 0.5% 升到 6%,抓取量两周掉了四成。
原因不止一个,得分开看。中间件对所有路径生效,包括公开文章页;每次请求都去查一次会话表,没有本地缓存;连接池太小,高并发时排队等待。
量一下改版前后的响应时间
curl -s -o /dev/null -w '%{time_starttransfer}\n' https://www.example.com/post/1
随后让中间件跳过公开路径
grep -rn 'auth_middleware' config/middleware.php
给会话查询加缓存
redis-cli info stats | grep keyspace_hits
排查用的命令都是临时敲的,没有写成脚本,事后才整理。
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
别只看报错消失,验证要多做一步。中间件跳过公开路径后响应回到 200ms 以内,蜘蛛超时占比降到 1% 以下,抓取量在五天内恢复。
这里还有个坑。抓取预算和响应时间直接相关,多加一层逻辑之前先想清楚蜘蛛会不会每次都付这个代价。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
