PHP进程大量堆积,网站502故障处理流程

网站访问时出现502 Bad Gateway,登录服务器执行 top 或 ps aux | grep php-fpm 发现PHP进程数量远超平常,甚至占满内存导致SSH卡顿——这是典型的PHP进程堆积故障。
本文面向零基础运维人员,从现象确认到根因排查,再到配置调整和效果验证,给出可直接照做的处理流程,帮你尽快恢复网站访问。

先确认故障现象与影响范围

不要急着重启PHP,先记录当前状态。
执行以下命令查看PHP进程数量和系统负载:

ps aux | grep php-fpm | grep -v grep | wc -l
uptime
free -m
top -b -n 1 | head -20

如果PHP进程数达到几十甚至几百,且 free -m 显示可用内存极低,说明进程堆积已经影响系统稳定。
同时检查Nginx错误日志,确认502是否由后端PHP无响应引起:

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

常见记录如 connect() to unix:
/run/php/php-fpm.sock failed (11:
Resource temporarily unavailable)
,
表示PHP-FPM的进程池已满,
无法接受新连接。

判断结论:
如果Nginx日志出现“Resource temporarily unavailable”或“connection refused”,
且PHP进程数持续高位,
即可确认是PHP-FPM进程堆积导致的502。

临时恢复:快速释放进程

如果网站完全无法访问,先让服务恢复,再深入排查。

  • 重启PHP-FPM服务(以常见路径为例):
systemctl restart php-fpm
# 或指定版本:systemctl restart php8.1-fpm
  • 如果重启后立刻再次堆积,说明有脚本在持续占用,可先临时降低 pm.max_children 并启用慢日志,避免雪崩。

注意:重启只是临时手段,不解决根本问题,下一步必须找到堆积原因。

定位堆积根源:日志与进程状态

查看PHP-FPM慢日志

编辑PHP-FPM池配置,通常位于 /etc/php/8.1/fpm/pool.d/www.conf(版本号按实际调整)。
找到并修改:

request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log

重启PHP-FPM后观察慢日志:

tail -f /var/log/php-fpm/slow.log

慢日志会记录执行超过5秒的脚本及调用栈,常见原因包括:数据库查询无索引、循环调用外部API、死循环、文件锁等待。

检查PHP-FPM状态页

如果已启用 pm.status_path,可通过Nginx访问状态页,查看活跃进程、空闲进程和最大监听队列。
若 listen queue 持续大于0,说明进程数不足或处理太慢。

分析系统资源瓶颈

iostat -x 1 5
vmstat 1 5

如果 %util 接近100%或 wa 值很高,说明磁盘I/O是瓶颈,PHP进程在等待I/O,导致堆积。

判断结论:慢日志中反复出现的脚本文件就是主要嫌疑对象,优先优化该脚本的数据库查询或外部调用。

调整PHP-FPM配置避免再次堆积

根据服务器内存和业务特点,合理设置进程管理参数。
以2GB内存、单站点为例,编辑 /etc/php/8.1/fpm/pool.d/www.conf:

pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500
request_terminate_timeout = 30s

参数说明:

  • pm.max_children:最大子进程数,按可用内存除以单个PHP进程平均内存(约30-50MB)估算。
  • pm.max_requests:每个进程处理多少个请求后重启,防止内存泄漏累积。
  • request_terminate_timeout:单个请求最长执行时间,超时会被终止,避免长期占用进程。

修改后重启PHP-FPM:

systemctl restart php-fpm

重要:不要盲目调大 pm.max_children,内存不足时反而会导致OOM,进一步加剧502。

验证修复效果与长期监控

调整后观察一段时间,执行以下检查:

  • PHP进程数是否稳定在合理范围:
watch -n 2 'ps aux | grep php-fpm | grep -v grep | wc -l'
  • 网站访问是否恢复正常,可多次刷新页面或使用 curl -I 测试:
curl -I http://你的域名

应返回 HTTP/1.1 200 OK 或 301/302,不再出现502。

  • 查看Nginx错误日志,确认不再新增 Resource temporarily unavailable。

建议配置基础监控,例如使用宝塔面板的“监控”功能或简单的Shell脚本定时记录PHP进程数和负载,便于提前发现异常。

最终结论:502故障恢复后,应持续关注慢日志和进程数变化,优化慢查询和超时脚本,才能避免反复出现PHP进程堆积。

常见疑问

为什么重启PHP后很快又出现502?
说明导致堆积的脚本或外部依赖问题依然存在,必须根据慢日志定位具体脚本,而不是反复重启。

调整 pm.max_children 后网站变慢怎么办?
可能是进程数设置过小,请求排队。可结合内存余量适当增加,并优化脚本执行效率,或考虑升级服务器配置。

如何区分是PHP-FPM问题还是Nginx问题?
查看Nginx错误日志,若提示连接PHP-FPM失败,则是PHP-FPM侧问题;若提示上游超时但PHP进程正常,需检查Nginx与PHP-FPM之间的网络或socket配置。

分享到:
上一篇
服务器管理口IPMI使用,远程开关机服务器
下一篇
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 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意