温馨提示×

如何调试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 验证,异常立即回滚

0