现象

网站访问时浏览器显示 502 Bad Gateway 错误,或者在宝塔面板中查看 Nginx 状态时,发现 PHP-FPM 服务未运行或进程数异常。此时 Nginx 本身通常是在运行的,但无法将请求转发给后端 PHP 处理程序。

原因

502 错误在宝塔环境下主要由两类原因导致:一是 PHP-FPM 进程意外退出或崩溃,常见于 PHP 代码错误、扩展冲突或配置语法错误;二是服务器物理内存(RAM)耗尽,导致 OOM Killer 强制杀死了 PHP-FPM 进程,这在运行高并发站点或大内存消耗脚本时尤为常见。

先自查(3 分钟)

首先登录服务器,检查系统内存使用情况,确认是否因内存不足导致进程被杀。执行以下命令查看内存状态:

free -h

如果可用内存极低或 Swap 使用率过高,需重点排查内存泄漏。接着查看 PHP-FPM 的错误日志,定位具体崩溃原因。以 Ubuntu 为例,日志路径通常在 /var/log/php-fpm.error.log 或宝塔面板指定的日志目录下:

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

若日志中出现 "Segmentation fault" 或 "Out of memory" 字样,即可初步判定为内存或代码崩溃问题。

解决步骤

第一步,重启 PHP-FPM 服务以恢复临时故障。在宝塔面板中,进入「软件商店」找到 PHP 版本,点击「服务」下的「重启」。若面板无响应,使用命令行重启:

systemctl restart php-fpm

第二步,若重启后依然报错,检查 PHP 配置文件中的内存限制。编辑 php.ini 文件,适当增加 memory_limit 和 max_execution_time 参数。注意:修改配置后必须重启 PHP 服务才能生效。

vim /www/server/php/74/etc/php.ini

在配置文件中找到并修改以下参数(数值根据服务器内存调整,单位 MB):

memory_limit = 256M
max_execution_time = 300

第三步,若怀疑是内存不足,检查并优化 PHP-FPM 进程池配置。编辑 php-fpm.conf 或对应的 pool 配置文件,调整 pm.max_children 参数,避免进程数过多占用内存。注意:该值设置过高会导致内存溢出,建议根据公式 (内存总量 / 每个进程占用内存) 估算。

vim /www/server/php/74/etc/php-fpm.d/www.conf

修改 pm.max_children 参数:

pm.max_children = 50

第四步,若问题依旧,检查 Nginx 与 PHP-FPM 的 Socket 连接是否正常。确保 Nginx 配置中的 fastcgi_pass 指向正确的 PHP-FPM 端口或 Socket 文件。

验证

重启 PHP 服务后,访问网站确认 502 错误是否消失。同时观察服务器监控,确认 PHP-FPM 进程稳定运行,且内存使用率处于合理范围。再次执行 free -h 命令,确认内存无异常飙升。

预防

定期监控服务器内存使用率,设置告警阈值。优化 PHP 代码,避免一次性加载大量数据。对于高并发站点,考虑增加服务器内存配置或优化 PHP-FPM 进程池策略。定期更新 PHP 及扩展,修复已知内存泄漏漏洞。

在奇异互动如何最快处理

若通过上述步骤仍无法解决,或服务器因内存不足导致无响应,请立即登录奇异互动会员中心。在「云服务器」详情页中,使用「升降配置」功能升级内存规格,从根本上解决资源不足问题。若怀疑是系统层面故障或需要深度日志分析,请通过「工单」功能提交请求,关联具体的云服务器产品,并附上 PHP-FPM 错误日志片段及 free -h 的输出结果,以便工程师快速定位。