Ubuntu下php-fpm故障排查步骤
导读:Ubuntu 下 PHP-FPM 故障排查步骤 一 快速定位服务状态与日志 确认服务是否运行(将版本号替换为你的实际版本,如 7.4、8.1、8.2、8.3): 查看状态:sudo systemctl status php7.4-fpm...
Ubuntu 下 PHP-FPM 故障排查步骤
一 快速定位服务状态与日志
- 确认服务是否运行(将版本号替换为你的实际版本,如 7.4、8.1、8.2、8.3):
- 查看状态:sudo systemctl status php7.4-fpm
- 启动/重启/开机自启:sudo systemctl start|restart|enable php7.4-fpm
- 查看系统日志与 FPM 日志:
- 系统日志:sudo journalctl -xeu php7.4-fpm
- FPM 错误日志:常见路径为 /var/log/php7.4-fpm.log 或 /var/log/php-fpm.log,实时查看:sudo tail -f /var/log/php7.4-fpm.log
- 若服务反复崩溃或卡死,可跟踪进程:
- 跟踪:sudo strace -f -ff -t -d -p $(pidof php7.4-fpm) 以上步骤可快速判断服务是否存活、为何失败以及失败前的系统调用轨迹。
二 核对配置与监听是否正确
- 主配置与进程池配置路径(按版本调整):
- 主配置:/etc/php/7.4/fpm/php-fpm.conf
- 进程池:/etc/php/7.4/fpm/pool.d/www.conf
- 重点检查项:
- listen:确保与 Web 服务器一致,常见为 127.0.0.1:9000(TCP)或 /run/php/php7.4-fpm.sock(Unix 套接字)
- 进程池必须存在:若 /etc/php/7.4/fpm/pool.d/ 下没有 .conf,FPM 会报 “No pool defined” 且无法启动;可从 www.conf.default 复制为 www.conf 后再启动
- 资源与上限:如 pm.max_children、pm.start_servers、pm.max_requests 等,避免资源耗尽或不合理回收
- 修改后先语法检查再重启:
- 语法检查:sudo php-fpm7.4 -t
- 重启:sudo systemctl restart php7.4-fpm 这些检查能排除最常见的配置错误与进程池缺失问题。
三 排查网络与权限问题
- 监听与连通性:
- 套接字是否存在且权限正确:ls -l /run/php/php7.4-fpm.sock
- 端口是否被占用(若使用 TCP):ss -lntp | grep 9000 或 netstat -tulpen | grep 9000
- 与 Web 服务器对接核对:
- Nginx 示例:fastcgi_pass unix:/run/php/php7.4-fpm.sock; 或 fastcgi_pass 127.0.0.1:9000;
- Apache 示例:ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
- 常见权限报错与处理:
- 若出现 “connect() to unix:/run/php/php7.4-fpm.sock failed (13: Permission denied)”,可在 www.conf 中调整:
- 临时方案(开发环境):listen.owner = www-data、listen.group = www-data、listen.mode = 0666
- 生产环境建议保持 0660 并通过 systemd 的 RuntimeDirectory=php 与 Group=www-data 正确设置套接字属主与权限
- 若出现 “connect() to unix:/run/php/php7.4-fpm.sock failed (13: Permission denied)”,可在 www.conf 中调整:
- 防火墙与端口放行(若走 TCP 9000):
- UFW:sudo ufw allow 9000 或 sudo ufw allow ‘Apache Full’ 以上步骤可定位套接字/端口连通性、权限与防火墙导致的访问失败。
四 应用与系统层面的常见错误
- 脚本错误与慢请求定位:
- 确保 display_errors 在生产关闭、log_errors 开启,并配置 error_log;结合 FPM 日志与浏览器报错定位语法/逻辑问题
- 慢请求可在 www.conf 开启 slowlog 与 request_slowlog_timeout 捕获耗时调用栈
- 资源与稳定性:
- 内存/磁盘:free -m、df -h 检查是否因 OOM 或磁盘满导致异常
- 进程管理参数:根据 pm 策略(static/dynamic/ondemand)与 max_children 评估并发与内存占用,避免 max_requests 过小引发频繁重启
- 访问状态与健康检查:
- 若启用 pm.status_path(如 /status),可通过 http://localhost/status 查看 pool、processes、slow requests 等 这些手段有助于从应用与系统资源层面发现间歇性与稳定性问题。
五 一键排查清单与常用命令
- 快速命令清单(按需替换版本号):
- 服务状态:systemctl status php7.4-fpm
- 启动/重启/自启:systemctl start|restart|enable php7.4-fpm
- 语法检查:php-fpm7.4 -t
- 日志跟踪:tail -f /var/log/php7.4-fpm.log
- 套接字与权限:ls -l /run/php/php7.4-fpm.sock
- 端口占用:ss -lntp | grep 9000
- 进程跟踪:strace -f -ff -t -d -p $(pidof php7.4-fpm)
- 防火墙放行:ufw allow 9000 或 ufw allow ‘Apache Full’
- 最小可用配置核对示例(www.conf 片段):
- listen = /run/php/php7.4-fpm.sock
- listen.owner = www-data、listen.group = www-data、listen.mode = 0660
- user = www-data、group = www-data
- 按需开启:pm.status_path = /status 与 slowlog = /var/log/php7.4-fpm.slow.log 以上清单覆盖从服务存活、配置语法、权限连通到资源瓶颈的常用检查点。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下php-fpm故障排查步骤
本文地址: https://pptw.com/jishu/758085.html
