记录一下那天晚上的排查过程。首页接了三个远程接口,TTFB 从 300ms 涨到 2.8 秒。百度抓取频次从 2 档掉到 0 档,站长平台提示「抓取超时比例偏高」,日志里大量请求在 3 秒后断开。
刚开始盯着「数据库慢查询占了一半响应时间」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。首页模板同步调用三个外部接口,任何一个慢都拖住整页。还有一种是没有页面级缓存,每次请求都重新渲染。
还有一种情况,PHP-FPM 进程数不足,请求排队。
测首页各阶段耗时
curl -s -o /dev/null -w 'dns:%{time_namelookup} conn:%{time_connect} ttfb:%{time_starttransfer}\n' https://www.example.com/
接着找出慢查询
mysql -e "SHOW FULL PROCESSLIST;" | head
给首页加 60 秒页面缓存
proxy_cache_valid 200 60s;
剩下的就是接口改异步后再测一次
curl -s -o /dev/null -w '%{time_starttransfer}\n' https://www.example.com/
别只看报错消失,验证要多做一步。TTFB 回到 400ms 以内,抓取超时比例降到 2% 以下,抓取频次一个月内回到 2 档。
提醒一点。抓取频次看的是整体响应质量,不只看首页,列表页和详情页一起测才准。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
