1. 查看PHP-FPM服务状态
使用systemctl命令(适用于systemd管理的系统)检查PHP-FPM服务是否运行正常,能快速判断服务是否崩溃或未启动。例如:
sudo systemctl status php-fpm # 替换为实际服务名(如php7.4-fpm) 若服务未运行,会显示“inactive (dead)”;若运行中,会显示“active (running)”。也可使用journalctl查看详细日志:
sudo journalctl -u php-fpm -n 50 --no-pager # 查看最近50条日志 这有助于快速定位服务启动失败或异常终止的原因。
2. 分析PHP-FPM错误日志
错误日志是诊断PHP-FPM问题的核心线索,通常位于/var/log/php-fpm/目录下(如error.log)。使用以下命令实时查看最新错误:
sudo tail -f /var/log/php-fpm/error.log # 实时跟踪错误日志 或查看特定错误类型(如“fatal error”):
grep 'fatal error' /var/log/php-fpm/error.log # 过滤致命错误 日志中会记录进程崩溃、权限问题、扩展加载失败等关键信息,是解决问题的首要依据。
3. 检查PHP-FPM配置文件语法
配置文件语法错误会导致PHP-FPM无法启动,使用php-fpm自带的测试命令验证语法:
sudo php-fpm -t # 测试主配置文件语法(如php7.4-fpm) 若语法有误,会输出错误位置(如“in /etc/php/7.4/fpm/php-fpm.conf on line 10”),根据提示修改配置文件后重启服务即可。
4. 监控PHP-FPM进程资源使用
使用top、htop或ps命令实时监控PHP-FPM进程的CPU、内存占用,识别资源瓶颈:
top -p $(pgrep php-fpm | paste -sd ',') # 监控所有php-fpm进程的CPU/内存 htop -p $(pgrep php-fpm) # 更直观的进程监控(需安装htop) ps aux | grep php-fpm | sort -k4 -nr # 按内存使用排序 若进程占用过高,可能需要调整pm.max_children(最大子进程数)或优化代码。
5. 启用并分析PHP-FPM慢日志
慢日志记录执行时间超过阈值的请求,帮助定位性能瓶颈。编辑PHP-FPM池配置文件(如/etc/php/7.4/fpm/pool.d/www.conf),启用慢日志:
slowlog = /var/log/php-fpm/slow.log # 慢日志路径 request_slowlog_timeout = 10s # 超过10秒的请求记录为慢请求 重启服务后,查看慢日志:
tail -f /var/log/php-fpm/slow.log # 实时查看慢请求 通过分析慢日志中的请求路径、执行时间,可针对性优化代码或数据库查询。
6. 使用strace调试PHP-FPM进程
若进程卡死或无响应,使用strace跟踪系统调用,查看进程阻塞的位置:
sudo strace -f -p $(pgrep php-fpm) -o /tmp/php-fpm-strace.log # 跟踪所有子进程 通过tail -f /tmp/php-fpm-strace.log实时查看,重点关注“read”、“write”、“wait”等系统调用,判断是否因I/O阻塞或死锁导致问题。
7. 利用第三方监控工具
对于长期监控和可视化,可使用以下工具:
php-fpm-exporter收集PHP-FPM指标(如进程数、请求处理时间),在Grafana中创建仪表盘展示。8. 检查常见配置问题
netstat或ss检查端口占用:sudo netstat -tulnp | grep 9000 # 检查9000端口(默认) sudo lsof /run/php/php-fpm.sock # 检查Unix套接字 修改www.conf中的listen参数(如改为9001)并重启服务。sudo mkdir -p /run/php # 创建套接字目录(如未存在) sudo chown -R www-data:www-data /run/php # 修改所有者(根据实际用户组调整) 同时检查www.conf中的user/group设置(通常为www-data)。php-fpm.conf中的process.max,或调整系统限制(ulimit -n)。