Ubuntu下PHP-FPM错误日志解读指南
在Ubuntu系统中,PHP-FPM的错误日志默认存储路径主要有两个:
/var/log/php-fpm.log(部分系统可能使用此路径);/var/log/php-fpm/error.log(更常见,专为PHP-FPM进程设计)。/var/log/php-fpm/www-error.log(用户级错误日志)。ls /var/log/php-fpm/
若日志路径被自定义,需检查PHP-FPM配置文件(/etc/php/{version}/fpm/pool.d/www.conf,{version}为PHP版本,如7.4、8.1)中的error_log指令。
使用tail -f命令可实时监控日志文件的更新,便于快速定位正在发生的错误:
sudo tail -f /var/log/php-fpm/error.log
按Ctrl+C退出实时查看模式。
通过grep命令可过滤出关键错误,提升排查效率:
grep "PHP Fatal error" /var/log/php-fpm/error.log
grep "PHP Warning" /var/log/php-fpm/error.log
SIGBUS、SIGSEGV):grep -E "child exited on signal|SIGBUS|SIGSEGV" /var/log/php-fpm/error.log
grep "PDOException: SQLSTATE\[HY000\]" /var/log/php-fpm/error.log
grep "Allowed memory size exhausted" /var/log/php-fpm/error.log
```。
致命错误(Fatal error):
示例:PHP Fatal error: Uncaught Error: Call to undefined function foo() in /var/www/script.php:12
含义:脚本调用了未定义的函数foo(),导致程序终止。
可能原因:函数名拼写错误、未包含对应的库文件、扩展未安装。
警告(Warning):
示例:PHP Warning: include(nonexistent_file.php): failed to open stream: No such file or directory in /var/www/script.php:5
含义:尝试包含不存在的文件,脚本会继续执行但可能存在隐患。
可能原因:文件路径错误、文件被删除。
通知(Notice):
示例:PHP Notice: Undefined variable: username in /var/www/script.php:8
含义:使用了未定义的变量,通常不影响程序执行但提示代码不规范。
可能原因:变量未初始化、拼写错误。
进程崩溃:
示例:WARNING: [pool www] child 12345 exited on signal 7 (SIGBUS) after 10.23 seconds from start
含义:进程因访问违规(如内存越界)崩溃,需检查代码或扩展的稳定性。
可能原因:PHP扩展bug、内存损坏。
进程池耗尽:
示例:WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
含义:并发请求数超过pm.max_children(进程池最大子进程数)限制,新请求将被阻塞或返回502错误。
可能原因:流量激增、脚本执行时间过长。
套接字/目录权限错误:
示例:ERROR: unable to bind listening socket for address '/run/php/php8.1-fpm.sock': Permission denied
含义:PHP-FPM进程无权访问套接字文件或目录,导致无法启动或接受连接。
可能原因:/run/php目录权限错误、listen.owner/group配置不当。
脚本访问权限错误:
示例:PHP Fatal error: Uncaught Exception: File not accessible in /var/www/script.php:15
含义:PHP-FPM用户(通常为www-data)无权读取脚本或数据文件。
可能原因:文件/目录权限过严(如chmod 700)、所有者错误。
端口/套接字冲突:
示例:ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use
含义:PHP-FPM配置的端口或套接字已被其他进程占用(如另一个PHP-FPM实例、Nginx)。
可能原因:重复启动PHP-FPM、Web服务器配置错误。
PHP-FPM启动失败:
示例:ERROR: failed to start daemon: exit code 1
含义:配置文件语法错误或依赖缺失,导致PHP-FPM无法启动。
可能原因:配置文件中有语法错误(如缺少分号)、PHP扩展未安装。
检查配置文件语法:修改配置文件后,使用以下命令验证语法是否正确:
sudo php-fpm{version} -t # 如sudo php-fpm8.1 -t
若语法错误,会提示具体行号。
重启PHP-FPM服务:修改配置或日志路径后,需重启服务使更改生效:
sudo systemctl restart php{version}-fpm # 如sudo systemctl restart php8.1-fpm
优化日志轮转:若日志文件过大,可配置logrotate切割日志(默认路径/etc/logrotate.d/php-fpm),避免占用过多磁盘空间。