1. 检查PHP-FPM服务状态
首先确认PHP-FPM服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status php7.x-fpm(将7.x替换为实际PHP版本,如8.1)。
若服务未运行(显示“inactive (dead)”),尝试启动服务:sudo systemctl start php7.x-fpm;若启动失败,继续下一步排查。
2. 查看PHP-FPM错误日志
错误日志是定位问题的核心依据,通常位于/var/log/php-fpm.log或/var/log/php7.x-fpm.log(7.x为PHP版本)。使用以下命令实时查看最新错误:
sudo tail -f /var/log/php-fpm.log
或过滤特定关键词(如“fatal error”):
sudo grep 'fatal error' /var/log/php-fpm.log
日志中会明确提示配置错误、权限问题、端口冲突等具体原因。
3. 验证配置文件语法
PHP-FPM的主配置文件(/etc/php/7.x/fpm/php-fpm.conf)或池配置文件(/etc/php/7.x/fpm/pool.d/www.conf)可能存在语法错误。使用以下命令测试语法正确性:
sudo php-fpm7.x -t(7.x为PHP版本)。
若输出“Configuration file is valid”,说明语法无误;若报错,根据提示修改对应配置文件并保存。
4. 解决端口/套接字冲突
若PHP-FPM配置为监听TCP端口(默认9000),需检查端口是否被其他进程占用:
sudo netstat -tulnp | grep 9000
或使用ss命令:
sudo ss -tulnp | grep 9000
若端口被占用,可杀死占用进程(sudo kill -9 <PID>)或修改PHP-FPM监听端口(编辑www.conf中的listen指令,如listen = 127.0.0.1:9001)。
若配置为Unix套接字(如listen = /run/php/php7.x-fpm.sock),检查套接字文件是否被占用:
sudo lsof /run/php/php7.x-fpm.sock
同样,杀死占用进程或修改套接字路径。
5. 检查文件权限
PHP-FPM进程(通常为www-data用户)需具备访问配置文件、日志文件、网站根目录的权限。常见操作:
sudo mkdir -p /run/phpsudo chown -R www-data:www-data /run/phpuser和group设置(www.conf中):user = www-datagroup = www-data/var/www/html)权限正确:sudo chown -R www-data:www-data /var/www/html6. 调整进程池配置
若出现“502 Bad Gateway”(进程崩溃)或“pm.max_children reached”(进程池耗尽),需调整进程池参数:
www.conf中的pm.max_children(最大子进程数),根据服务器内存调整(如每进程占用100MB内存,1GB内存可设置为pm.max_children = 10)。pm模式为dynamic(动态调整进程数),并设置pm.start_servers(启动时的进程数)、pm.min_spare_servers(最小空闲进程数)、pm.max_spare_servers(最大空闲进程数),例如:pm = dynamicpm.start_servers = 5pm.min_spare_servers = 2pm.max_spare_servers = 8sudo systemctl restart php7.x-fpm。7. 处理扩展加载失败
若日志中出现“Unable to load dynamic library”(无法加载扩展),需检查扩展配置:
php -m。php.ini中的扩展加载行(/etc/php/7.x/fpm/php.ini),注释掉有问题的扩展(如;extension=redis.so)。sudo apt-get install --reinstall php7.x-redis(以redis为例)。8. 测试Web服务器与PHP-FPM通信
若出现“502 Bad Gateway”(网关错误),需确认Web服务器(如Nginx)与PHP-FPM的通信配置正确:
fastcgi_pass指令,确保与PHP-FPM的listen指令一致(如fastcgi_pass unix:/run/php/php7.x-fpm.sock;或fastcgi_pass 127.0.0.1:9000;)。fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;(传递脚本路径给PHP-FPM)。sudo systemctl restart nginx。9. 监控系统资源
若出现“Allowed memory exhausted”(内存耗尽)或“Too many open files”(文件描述符过多),需监控系统资源:
free -h查看内存使用情况,调整memory_limit(php.ini中,如memory_limit = 256M)。ulimit -n查看文件描述符限制,若需增加,编辑/etc/security/limits.conf,添加:www-data soft nofile 65535www-data hard nofile 6553510. 启用调试模式
若以上步骤无法解决问题,可启用PHP-FPM调试模式,获取更详细的日志:
php-fpm.conf,设置log_level = debug(默认为notice)。sudo systemctl restart php7.x-fpm,查看日志中的详细调试信息。