PHP-FPM进程数不足会导致响应缓慢、502错误或请求排队,核心是pm.max_children设置过低;需通过查看配置与状态、实测内存占用、按公式计算合理值(如4GB内存设为80–90)、修改www.conf中动态模式参数并重启服务来优化。

PHP-FPM 进程数不足会导致网站响应缓慢、502 Bad Gateway 错误或请求排队,核心是 pm.max_children 设置过低,需结合服务器内存与平均进程内存合理调整。
1. 查看当前 PHP-FPM 配置与运行状态
先确认正在使用的配置文件路径和当前工作模式:
# 查找主配置文件(常见路径)
php-fpm -t 2>&1 | grep "configuration file"
# 或
ps aux | grep php-fpm | grep master | head -1 | awk '{print $NF}'
<h1>查看当前进程数统计</h1><p>sudo systemctl status php-fpm</p><h1>或直接查进程</h1><p>ps aux | grep 'php-fpm:' | grep -v grep | wc -l</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p><h1>查看实时子进程状态(需开启 pm.status_path)</h1><p>curl <a href="https://www.php.cn/link/3c7489895ccdfce3760939456109a9a3">https://www.php.cn/link/3c7489895ccdfce3760939456109a9a3</a> 2>/dev/null | grep 'active processes|max children'
2. 计算合理的 pm.max_children 值
不能盲目调高,需根据内存估算:每个 PHP-FPM 子进程平均占用 20–40MB(取决于扩展和脚本复杂度)。公式如下:
- 可用内存(MB)≈ 总内存 × 0.7(预留系统及其他服务)
- 单进程平均内存 ≈
ps --no-headers -o rss -C php-fpm | awk '{sum+=$1} END {printf "%.0f\n", sum/NR/1024}' - max_children ≈ 可用内存 ÷ 单进程平均内存
例如:4GB 内存服务器,实测平均进程占 32MB → 4096 × 0.7 ≈ 2867MB → 2867 ÷ 32 ≈ 89,可设为 80–90 保留余量。
3. 修改 PHP-FPM 池配置(推荐修改 www.conf)
编辑对应 pool 配置文件(通常位于 /etc/php/{version}/fpm/pool.d/www.conf),重点调整以下参数:
; 选择动态管理模式(更灵活) pm = dynamic <p>; 最大子进程数(按上一步计算结果设置) pm.max_children = 80</p><p>; 空闲时保持的最小子进程数(建议 5–10) pm.start_servers = 10</p><p>; 空闲时最少保持的子进程数 pm.min_spare_servers = 5</p><p>; 空闲时最多保持的子进程数 pm.max_spare_servers = 20</p><p>; 每个子进程处理请求数上限(防内存泄漏,建议 500–2000) pm.max_requests = 1000</p><p>; 启用状态页(便于监控) pm.status_path = /status
4. 重启服务并验证生效
保存后必须重载配置,不可仅 reload(部分旧版本需 restart):
# 语法检查 sudo php-fpm -t <h1>重载(推荐)</h1><p>sudo systemctl reload php-fpm</p><h1>或强制重启(确保生效)</h1><p>sudo systemctl restart php-fpm</p><h1>验证新配置是否加载</h1><p>sudo php-fpm -i | grep "max_children"</p><h1>或查看运行中进程数上限</h1><p>grep 'max_children' /proc/$(pgrep php-fpm | head -1)/fdinfo/* 2>/dev/null | head -1
调整后观察 5–15 分钟,配合 Nginx 的 error_log 和 access_log 检查是否还有 502 或 “server reached pm.max_children setting” 提示。不复杂但容易忽略内存实测和渐进式调优。



















