PHP-FPM进程数调整,解决网站502网关错误

网站突然打不开,浏览器显示502 Bad Gateway,这是Nginx无法从PHP-FPM拿到响应时的典型表现。
多数情况下,并不是PHP代码坏了,而是PHP-FPM的进程数不够用,请求排队超时。
本文面向零基础用户,讲清楚怎么判断、怎么调整、怎么验证,让网站恢复稳定。

先确认是不是PHP-FPM进程不够用

502错误的原因很多,动手改配置前先做两步排查,避免白忙。

第一步,查看Nginx错误日志,确认上游连接失败。
在服务器上执行:

tail -n 50 /var/log/nginx/error.log

如果看到类似 connect() to unix:
/run/php/php-fpm.sock failed
upstream timed out
说明Nginx确实连不上PHP-FPM。

第二步,查看PHP-FPM自己的日志。
路径通常在 /var/log/php-fpm.log/var/log/php-fpm/www-error.log

tail -n 50 /var/log/php-fpm/www-error.log

出现 WARNING: [pool www] server reached pm.max_children setting 时,基本可以确定进程数被打满了。

也可以在宝塔面板操作:进入“软件商店”找到PHP版本,点击“设置”->“日志”,直接查看错误日志。

调整PHP-FPM进程数

PHP-FPM的进程管理有三种模式,先搞清楚区别再改:

  • static:固定进程数,适合内存充足、流量稳定的场景。
  • dynamic:动态调整,空闲时回收,适合大多数网站。
  • ondemand:按需启动,省内存但响应稍慢,适合低流量站点。

打开对应PHP版本的配置文件。
命令行环境一般在 /etc/php/8.1/fpm/pool.d/www.conf,路径中的版本号按你实际安装的PHP版本调整。
宝塔面板路径为“软件商店”->PHP版本->“设置”->“配置修改”。

找到 pm 及相关参数,按下面示例修改:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

参数怎么定?pm.max_children 是最关键的,它决定了同时能处理多少个PHP请求。
一个简单的估算方法:用服务器可用内存除以单个PHP进程平均占用内存。
比如可用内存2GB,单个进程约40MB,那么 2 * 1024 / 40 ≈ 51,设置50左右比较稳妥。

pm.max_requests 表示每个进程处理多少个请求后自动重启,能缓解内存泄漏,一般设500到1000。

注意:pm.max_children 不要超过服务器内存能承受的范围,否则容易触发OOM,反而导致整个服务崩溃。

保存后平滑重启并观察

配置改完后,不要直接重启服务器。
先检查配置语法是否正确:

php-fpm -t

如果显示 configuration file test is successful,再平滑重启PHP-FPM:

systemctl reload php8.1-fpm

版本号按实际情况替换。
宝塔面板直接点“服务”->“重载配置”即可。

重载后,用下面的命令观察进程数是否按预期变化:

ps aux | grep php-fpm | wc -l

或者查看PHP-FPM状态页(如果已开启):

curl http://127.0.0.1/status

状态页会显示 active processesmax children reached 等关键指标。

验证502是否真正解决

调整完不要立刻关掉终端,做几个验证动作:

  • 用浏览器反复刷新之前报502的页面,观察是否稳定打开。
  • 执行 tail -f /var/log/nginx/error.log,持续观察几分钟,确认不再出现上游连接失败。
  • 如果网站有访问统计,对比调整前后的并发访问量,确认进程数能满足高峰需求。

如果502仍然出现,检查Nginx的 fastcgi_read_timeout 是否过短,以及PHP脚本本身是否有死循环或长时间阻塞。

几个容易踩的坑

只改数字不看内存pm.max_children 设得过大,服务器内存被吃光,MySQL和Nginx也会被拖垮。
调整前先用 free -m 确认可用内存。

改了配置没重载:修改 www.conf 后必须重载PHP-FPM,否则配置不生效。

忽略慢查询和慢脚本:如果数据库查询很慢,再多的PHP进程也会被占满。
502反复出现时,要同时排查MySQL慢查询和PHP代码性能。

多个PHP版本搞混:服务器上装了多个PHP版本时,要确认Nginx实际使用的是哪个socket,改错配置文件等于没改。

常见疑问

调整进程数后需要重启Nginx吗?
一般不需要。PHP-FPM和Nginx是独立服务,重载PHP-FPM即可生效。如果Nginx配置也改过,再单独重载Nginx。

dynamic和static选哪个?
流量波动大选dynamic,能自动伸缩;流量稳定且内存充足选static,响应更一致。拿不准就先用dynamic。

调整后网站变快了吗?
如果之前是进程不够导致的排队,调整后响应会明显改善。但如果瓶颈在数据库或代码,进程数调整只能缓解,不能根治。

多少进程数才算合理?
没有固定答案,取决于内存、CPU和业务类型。建议从估算值起步,观察状态页的 max children reached 是否频繁出现,再逐步微调。

调整PHP-FPM进程数是解决502网关错误的常见手段,核心是让进程数与服务器内存和实际并发匹配。
按本文步骤先排查日志,再修改配置,最后验证效果,大多数502问题都能得到缓解。
如果问题依旧,建议借助官方文档或专业运维进一步分析。

分享到:
上一篇
服务器系统盘和数据盘分离,故障保护方案
下一篇
PHP超时时间修改,处理长时间页面生成
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意