网站变慢、响应延迟、频繁出现502或504错误但cpu和内存不高,通常是php-fpm进程池耗尽所致;应立即执行ps命令比对活跃进程数与pm.max_children,检查fpm状态页中active processes是否长期打满,并验证nginx超时参数与request_terminate_timeout是否匹配。

网站变慢、响应延迟、频繁出现 502 或 504 错误,但 CPU 和内存看起来并不高?很可能是 PHP-FPM 进程数不够用了——请求在排队,而所有子进程都在忙或已耗尽。这不是代码慢,是“没工位可坐”。排查核心就三点:看状态、查堆积、验配置。
一眼识别是否被进程池卡住
不用等用户反馈,直接登录服务器快速验证:
- 执行 ps aux | grep 'php-fpm:' | grep -v grep | wc -l,看当前活跃的 PHP-FPM 子进程数;对比 pm.max_children 值(通常在
/etc/php-fpm.d/www.conf或/etc/php/*/fpm/pool.d/www.conf中),如果两者非常接近(比如 49/50),基本就是满负荷了 - 检查 Nginx worker 进程状态:ps aux | grep 'nginx: worker',若大量处于 S (sleeping) 状态,且无明显 CPU 占用,说明它们正等着 PHP-FPM 返回,而非自身卡顿
- 用 curl 查 FPM 状态页(需提前开启):curl -s http://127.0.0.1/status?full | grep -E "(active|slow)",重点关注
active processes是否长期等于max children,以及slow requests是否持续增长
确认请求是否真在排队等待
FPM 自身不暴露队列长度,但可通过间接方式判断积压程度:
- 启用 pm.status_path(如
pm.status_path = /status),并在 Nginx 的 server 块中添加对应 location,再访问http://your-domain/status?full,查看listen queue和listen queue len—— 若前者长期大于 0,说明新请求进不来,已在内核 listen 队列里堵着 - 观察 access.log 中的
$request_time和$upstream_response_time:如果前者远大于后者(例如 request_time=2.8s,upstream_response_time=0.02s),说明请求在 Nginx 到 FPM 之间等待了很久,极可能卡在连接建立或进程分配环节 - 用 ab 或 wrk 模拟并发压测(如
ab -c 100 -n 1000 http://127.0.0.1/test.php),同时监控active processes变化。若迅速打满且响应时间陡增,就是进程池瓶颈
检查关键配置是否合理
光看数字不够,得看配置逻辑是否匹配实际负载:
-
pm.max_children:不是越大越好。估算公式:可用内存 ÷ 单个 PHP 进程平均内存(可用
ps aux --sort=-%mem | head -10观察)。例如 2GB 可用内存,每个进程占 40MB → 建议设为 40–50;设太高会 OOM,太低则排队 -
pm = dynamic 还是 static? 动态模式更稳妥:
pm.start_servers设为预期最低并发量,pm.min_spare_servers和pm.max_spare_servers控制空闲池上下限,避免频繁启停 - request_terminate_timeout 必须设置(如 30s),否则一个死循环或慢 file_get_contents 就会让整个进程卡死,等同于永久占用一个 slot
- pm.max_requests 建议设为 500–1000,防止内存泄漏导致进程越跑越重,最终拖垮整体吞吐
配合 Nginx 层交叉验证
Nginx 配置不当也会放大 FPM 进程不足的影响:
- 检查 fastcgi_pass 是走 TCP 还是 Unix socket;Unix socket 更高效,但注意
listen.owner/listen.group权限是否让 nginx 能连上 - 确认 fastcgi_read_timeout 和 fastcgi_send_timeout 大于 PHP 的
request_terminate_timeout,否则 Nginx 会先断开,报 504 - 若使用 upstream 定义 PHP 后端,加上
keepalive 32并在 fastcgi_params 中启用连接复用,减少反复建连开销
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











