排查PHP-FPM故障需遵循“状态检查→日志分析→配置验证→资源确认”的逻辑,以下是具体步骤:
首先确认PHP-FPM服务是否处于运行状态,使用以下命令:
sudo systemctl status php7.x-fpm # 将7.x替换为实际PHP版本(如7.4、8.1)
ps aux | grep php-fpm查看PHP-FPM进程是否存在,或pgrep php7.x-fpm确认进程ID。日志是定位故障的核心依据,PHP-FPM的错误日志通常位于以下路径:
/var/log/php-fpm.log(默认路径)/var/log/php7.x-fpm.log(版本化路径)/etc/php/7.x/fpm/php-fpm.conf中的error_log指令确认。使用以下命令查看日志:
sudo tail -f /var/log/php-fpm.log # 实时查看最新错误
sudo cat /var/log/php-fpm.log # 查看完整日志
重点关注fatal error(致命错误)、warning(警告)或permission denied(权限问题)等关键词。
配置文件错误会导致PHP-FPM无法启动,需检查主配置文件和池配置文件的语法:
/etc/php/7.x/fpm/php-fpm.conf/etc/php/7.x/fpm/pool.d/www.conf使用php-fpm -t命令测试语法:
sudo php-fpm -t
若输出Configuration file is valid,说明语法正确;若有错误,需根据提示修改对应配置项。
PHP-FPM通常通过Unix套接字(如/run/php/php7.x-fpm.sock)或TCP端口(如9000)通信,需确认监听状态:
sudo ss -tulnp | grep php-fpm # 推荐(更现代)
sudo netstat -tulnp | grep php-fpm # 传统命令
listen = 9000),需确保端口未被其他进程(如Apache、Nginx)占用;若为套接字监听,需确认套接字文件路径正确且具备读写权限。PHP-FPM进程需具备访问配置文件、日志文件、网站根目录的权限,常见权限问题及解决:
/var/log/php-fpm):sudo chown -R www-data:www-data /var/log/php-fpm # 假设运行用户为www-data
sudo chmod -R 755 /var/log/php-fpm
/var/www/html):sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
注:运行用户通常为www-data(Nginx/Apache默认),可通过ps aux | grep php-fpm确认。
修改配置文件(如调整进程数、修改监听地址)后,需重启服务使变更生效:
sudo systemctl restart php7.x-fpm
若重启失败,需再次检查日志确认错误原因。
若需实时监控PHP-FPM的运行状态(如活跃进程数、请求处理情况),可启用状态页面:
/etc/php/7.x/fpm/pool.d/www.conf,取消以下注释并修改:pm.status_path = /status # 状态页面路径
curl -L http://localhost/status
输出结果会显示PHP-FPM的进程数、请求队列、内存使用等信息。
若故障与版本兼容性有关,可更新系统和PHP-FPM至最新版本:
sudo apt update
sudo apt upgrade php-fpm # 更新PHP-FPM
sudo apt upgrade # 更新系统
更新后重启服务:sudo systemctl restart php7.x-fpm。
通过以上步骤,可逐步定位并解决Ubuntu上PHP-FPM的常见故障。若问题仍未解决,需根据日志中的具体错误信息进一步分析(如“socket not found”“permission denied”“too many open files”等)。