GSC 抓取统计里主机负载错误一天两百多次,可同一时段 top 显示 CPU 空闲八成,内存也没吃满,把页面逐个 curl 一遍响应都在 300ms 以内。
一开始怀疑是「磁盘 inode 用尽,写入日志失败后应用返回 500」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。PHP-FPM 的进程池被慢请求占满,新请求排队直到网关超时。也可能是CDN 回源并发上限设得太低,超出部分直接被边缘节点拒绝。
少数情况下是数据库连接数上限打满,页面查询在这里卡住。
动手时先看进程池的排队情况
grep -E 'listen queue|max children' /var/log/php-fpm/error.log | tail -20
再往下统计同一分钟的 5xx 分布
awk '$9>=500{print substr($4,2,17)}' access.log | sort | uniq -c | sort -rn | head
然后核对磁盘与 inode 余量
df -h /var/www; df -i /var/www
临时调大进程池观察水位
pm.max_children = 40
pm.max_requests = 800
别只看报错消失,验证要多做一步。调整后主机负载错误在两小时内归零,GSC 里同一时段的抓取成功率回到 99% 以上,页面响应时间中位数下降一半。
CPU 不高不代表没瓶颈,进程池排队和连接数打满的表现和负载过高完全一样,要分开看。这类问题最好一次改到位,反复小改反而容易把原因搅混。
