如何调试Ubuntu上的PHP-FPM问题
小樊
36
2025-11-22 20:54:42
Ubuntu 上调试 PHP-FPM 的实用流程
一 快速定位服务与连通性
- 确认服务状态与版本
- 查看服务:sudo systemctl status phpX.X-fpm(将 X.X 替换为你的 PHP 版本,如 7.4、8.1、8.2)
- 实时看日志:sudo journalctl -u phpX.X-fpm -f
- 检查进程与监听
- 进程是否存在:pgrep phpX.X-fpm
- 监听端口或套接字:ss -plnt | grep php;或 ls -l /var/run/php/phpX.X-fpm.sock
- Web 与 FPM 的连通性自检
- 在站点根目录放一个 phpinfo.php:,访问确认 PHP 是否由 FPM 解析
- 若已启用状态页,在 FPM 配置中设置 pm.status_path(如 /status),Nginx 转发 location ~ ^/status$ { include fastcgi_params; fastcgi_pass unix:/var/run/php/phpX.X-fpm.sock; },访问 http://你的域名/status 查看进程与队列情况
二 日志与错误定位
- 先找对日志文件
- FPM 错误日志常见路径:/var/log/phpX.X-fpm.log 或 /var/log/php-fpm.log;也常见按版本分目录:/var/log/php/X.X-fpm.log
- 实时查看:sudo tail -f /var/log/phpX.X-fpm.log
- 在 pool 配置中显式开启与定向日志(/etc/php/X.X/fpm/pool.d/www.conf)
- catch_workers_output = yes
- php_admin_value[error_log] /var/log/php-fpm/custom_error.log
- php_admin_flag[log_errors] on
- php_admin_value[error_reporting] E_ALL & E_DEPRECATED & E_STRICT
- 修改后重启:sudo systemctl restart phpX.X-fpm
- 开启慢日志定位耗时请求
- slowlog = /var/log/php-fpm/slow.log
- request_slowlog_timeout = 5s
- 分析要点
- 查找 Fatal/Parse/Permission denied、连接被拒绝、No such file、listen 队列溢出等关键字
- 结合时间与 URI 定位触发请求的上下文,必要时提高 log_level 到 debug 做短时排障
三 配置与权限检查
- 核对监听与上游一致性
- FPM 的 listen 与 Web 服务器的 fastcgi_pass 必须一致:如 listen = 127.0.0.1:9000 对应 fastcgi_pass 127.0.0.1:9000;或 listen = /var/run/php/php7.4-fpm.sock 对应 fastcgi_pass unix:/var/run/php/php7.4-fpm.sock
- 套接字权限与属主
- listen.owner = www-data;listen.group = www-data;listen.mode = 0660
- 确保运行用户(如 www-data)对 socket、日志目录与网站根目录具备读写权限
- 端口冲突排查
- 若监听 9000 端口,确认无其它服务占用:ss -lntp | grep :9000
- 修改配置后务必重启:sudo systemctl restart phpX.X-fpm
四 性能与稳定性调优
- 进程池关键参数(/etc/php/X.X/fpm/pool.d/www.conf)
- pm = dynamic
- pm.max_children = 50(依据内存与单进程占用评估)
- pm.start_servers = 5;pm.min_spare_servers = 5;pm.max_spare_servers = 10
- pm.max_requests = 500(缓解潜在内存泄漏)
- 监听队列与系统参数
- listen.backlog = 1024(或更高,2 的幂);同时检查内核:cat /proc/sys/net/core/somaxconn
- 缓存与执行效率
- 启用 OPcache(php.ini):opcache.enable=1;opcache.memory_consumption=64;opcache.max_accelerated_files=4000;opcache.revalidate_freq=2
- 资源与稳定性
- 监控内存与磁盘:free -m、df -h
- 必要时重装或升级:sudo apt update && sudo apt upgrade;sudo apt install --reinstall phpX.X-fpm
五 进阶排障命令与最小化复现
- 动态跟踪进程系统调用
- 获取 FPM 主进程 PID:pgrep phpX.X-fpm
- 跟踪:sudo strace -f -ff -t -d -p (分析启动失败、卡死、慢 I/O 等)
- 最小化 Nginx 配置片段(用于验证)
- location ~ .php$ {
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_pass unix:/var/run/php/phpX.X-fpm.sock;
- }
- 变更与回滚
- 每次只改一处,变更前备份配置;修改后用 sudo systemctl restart phpX.X-fpm 验证,异常立即回滚