在 Ubuntu 上调试 php-fpm 可以从 日志、配置、进程、请求链路 等多个层面入手。下面按常见场景给你一套实用调试方法。
systemctl status php-fpm
# 或(Ubuntu 常见)
systemctl status php8.1-fpm
如果没启动:
systemctl start php8.1-fpm
systemctl enable php8.1-fpm
常见路径:
/var/log/php8.1-fpm.log
或:
/var/log/php8.1-fpm/error.log
查看实时日志:
tail -f /var/log/php8.1-fpm.log
编辑:
/etc/php/8.1/fpm/php-fpm.conf
修改:
log_level = debug
然后重启:
systemctl restart php8.1-fpm
ls /etc/php/8.1/fpm/pool.d/
常见文件:
www.conf
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm-www-error.log
php_admin_value[log_errors] = On
否则 PHP 脚本错误不会输出到 fpm 日志。
grep listen /etc/php/8.1/fpm/pool.d/www.conf
常见两种:
listen = /run/php/php8.1-fpm.sock
listen = 127.0.0.1:9000
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
如果不匹配,请求会直接 502。
# php-fpm 是否在运行
ps aux | grep php-fpm
# socket 文件是否存在
ls -l /run/php/
# nginx 错误日志
tail -f /var/log/nginx/error.log
| 问题 | 排查 |
|---|---|
| socket 权限不足 | listen.owner/listen.group |
| 未启动 | systemctl |
| 进程数耗尽 | pm.max_children |
| 超时 | request_terminate_timeout |
/etc/php/8.1/fpm/php.ini
display_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php-fpm-script.log
sudo -u www-data php -r "echo 'OK';"
SCRIPT_FILENAME=/var/www/html/index.php \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect /run/php/php8.1-fpm.sock
ps aux | grep php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
# 实时日志
tail -f /var/log/php8.1-fpm.log
# nginx 错误
tail -f /var/log/nginx/error.log
# php 错误
tail -f /var/log/php-fpm-script.log
systemctl restart php8.1-fpm
journalctl -u php8.1-fpm -f
php-fpm8.1 -t # 配置语法检查
如果你愿意,可以把 具体报错(502 / 504 / 空白页 / 超时)或日志贴出来,我可以直接帮你定位是哪一层的问题。