php-fpm在Ubuntu中如何实现故障排查
导读:Ubuntu 上 PHP-FPM 故障排查清单 一 快速定位服务与连通性 确认服务状态与版本:使用命令查看 PHP-FPM 是否运行(将版本号替换为你的实际版本,如 7.4/8.1/8.2) 查看状态:sudo systemctl st...
Ubuntu 上 PHP-FPM 故障排查清单
一 快速定位服务与连通性
- 确认服务状态与版本:使用命令查看 PHP-FPM 是否运行(将版本号替换为你的实际版本,如 7.4/8.1/8.2)
- 查看状态:
sudo systemctl status php8.1-fpm - 启动/重启:
sudo systemctl restart php8.1-fpm - 开机自启:
sudo systemctl enable php8.1-fpm
- 查看状态:
- 检查进程与监听
- 进程是否存在:
pgrep php-fpm - 监听端口或套接字:
ss -plnt | grep php或netstat -plnt | grep php - 套接字文件是否存在:
ls -l /run/php/php8.1-fpm.sock
- 进程是否存在:
- 若服务未安装或被误删,重新安装对应版本:
sudo apt-get install php8.1-fpm - 以上步骤可快速判断 PHP-FPM 是否存活、监听是否正确、以及是否缺失安装。
二 配置与权限核对
- 核对 PHP-FPM 池配置:编辑 /etc/php/8.1/fpm/pool.d/www.conf
- 确认监听地址与 Web 服务器一致:
- TCP:
listen = 127.0.0.1:9000 - Unix 套接字:
listen = /run/php/php8.1-fpm.sock
- TCP:
- 套接字权限(与 Nginx 工作进程用户保持一致,常见为 www-data):
listen.owner = www-datalisten.group = www-datalisten.mode = 0660
- 确认监听地址与 Web 服务器一致:
- 核对 Web 服务器转发配置
- Nginx 示例:
- TCP:
fastcgi_pass 127.0.0.1:9000; - 套接字:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
- TCP:
- 修改后先语法检查:
sudo nginx -t,再重载:sudo systemctl reload nginx
- Nginx 示例:
- 修改配置后务必重启 PHP-FPM:
sudo systemctl restart php8.1-fpm - 常见 502/504 多由监听地址不匹配、权限错误或进程未启动导致,上述核对可快速排除。
三 日志分析与慢查询定位
- 查看 PHP-FPM 日志:先确认日志路径(不同发行版或版本可能不同)
- 常见路径:
/var/log/php8.1-fpm.log、/var/log/php-fpm.log、/var/log/php-fpm/error.log - 实时查看:
sudo tail -f /var/log/php8.1-fpm.log
- 常见路径:
- 查看 Web 服务器错误日志(以 Nginx 为例):
sudo tail -f /var/log/nginx/error.log- 典型线索:
connect() failed (111: Connection refused)→ PHP-FPM 未运行或端口不对No such file or directory→ Unix 套接字路径不一致
- 典型线索:
- 开启与查看慢日志(性能瓶颈定位)
- 在 www.conf 中启用:
slowlog = /var/log/php-fpm/slow.logrequest_slowlog_timeout = 5s
- 分析:
sudo tail -f /var/log/php-fpm/slow.log
- 在 www.conf 中启用:
- 调整日志级别与输出(可选):在 www.conf 中
php_admin_flag[log_errors] = onphp_admin_value[error_log] = /var/log/php-fpm/custom_error.log- 修改后重启:
sudo systemctl restart php8.1-fpm
- 日志能直接指出配置解析失败、权限拒绝、连接被拒、脚本超时等根因。
四 常见故障场景与修复要点
- 服务无法启动或启动后立即退出
- 使用
systemctl status php8.1-fpm与journalctl -xe查看具体报错 - 常见原因:缺少池配置(No pool defined)、配置语法错误、权限问题
- 修复:确保 /etc/php/8.1/fpm/pool.d/ 下存在有效的 .conf(如 www.conf),修正语法后重启
- 使用
- 502 Bad Gateway
- 快速判定:Nginx 能访问但转发给 PHP-FPM 失败
- 处理:核对 Nginx 的 fastcgi_pass 与 PHP-FPM 的 listen 一致;检查套接字文件是否存在且权限为 0660、属主为 www-data;查看 PHP-FPM 与 Nginx 错误日志获取直指性报错
- 504 Gateway Timeout
- 含义:PHP-FPM 处理超时
- 处理:开启并分析慢日志,定位耗时脚本;适当调大 request_terminate_timeout(或 FPM 的 request timeout);检查后端依赖(DB/Redis/外部 API)是否异常或慢
- 进程耗尽或频繁崩溃
- 现象:高峰期 502/504 增多、日志提示进程异常
- 处理:在 www.conf 调整进程管理参数(如 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers),结合内存与业务并发合理设置,避免资源争用导致崩溃
五 进阶诊断命令
- 跟踪系统调用定位初始化或运行时问题:
sudo strace -f -ff -t -d -p < PHP-FPM-PID> - 查看监听端口/套接字:
ss -plnt | grep php或netstat -plnt | grep php - 检查套接字文件与权限:
ls -l /run/php/php8.1-fpm.sock - 若系统启用 AppArmor,检查是否拦截:
dmesg | grep apparmor - 动态查看服务日志:
journalctl -u php8.1-fpm -f - 以上命令适用于定位难以复现的启动失败、权限拒绝、连接异常与运行时阻塞等问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: php-fpm在Ubuntu中如何实现故障排查
本文地址: https://pptw.com/jishu/789167.html
