首页主机资讯php-fpm在Ubuntu中如何实现故障排查

php-fpm在Ubuntu中如何实现故障排查

时间2026-01-21 22:17:03发布访客分类主机资讯浏览1412
导读: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 phpnetstat -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
    • 套接字权限(与 Nginx 工作进程用户保持一致,常见为 www-data):
      • listen.owner = www-data
      • listen.group = www-data
      • listen.mode = 0660
  • 核对 Web 服务器转发配置
    • Nginx 示例:
      • TCP:fastcgi_pass 127.0.0.1:9000;
      • 套接字:fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    • 修改后先语法检查:sudo nginx -t,再重载:sudo systemctl reload 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.log
      • request_slowlog_timeout = 5s
    • 分析:sudo tail -f /var/log/php-fpm/slow.log
  • 调整日志级别与输出(可选):在 www.conf
    • php_admin_flag[log_errors] = on
    • php_admin_value[error_log] = /var/log/php-fpm/custom_error.log
    • 修改后重启:sudo systemctl restart php8.1-fpm
  • 日志能直接指出配置解析失败、权限拒绝、连接被拒、脚本超时等根因。

四 常见故障场景与修复要点

  • 服务无法启动或启动后立即退出
    • 使用 systemctl status php8.1-fpmjournalctl -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_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers),结合内存与业务并发合理设置,避免资源争用导致崩溃

五 进阶诊断命令

  • 跟踪系统调用定位初始化或运行时问题:sudo strace -f -ff -t -d -p < PHP-FPM-PID>
  • 查看监听端口/套接字:ss -plnt | grep phpnetstat -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
php-fpm在Ubuntu中如何实现集群部署 php-fpm在Ubuntu中如何实现权限控制

游客 回复需填写必要信息