Ubuntu系统中,PHP-FPM的错误日志默认路径为/var/log/php-fpm/error.log(部分版本可能为/var/log/php-fpm.log)。若日志文件不存在,需检查PHP-FPM配置文件(/etc/php/{version}/fpm/pool.d/www.conf)中的error_log指令,确认日志路径是否自定义。
tail -f /var/log/php-fpm/error.log,可动态监控日志输出,适合排查实时问题。less +F /var/log/php-fpm/error.log,支持上下翻页和搜索(按/键输入关键字)。grep命令提取关键信息,例如grep "Fatal" /var/log/php-fpm/error.log可筛选出所有致命错误。每条PHP-FPM错误日志通常包含以下要素:
[01-Sep-2023 12:34:56]),帮助定位问题发生时段。emergency(系统无法工作)、alert(需立即行动)、critical(临界故障);error(一般错误,影响部分功能)、warning(潜在问题,不影响运行)、notice(一般性通知)、info(信息性消息)、debug(调试信息)。PHP Fatal error: Uncaught Error: Call to undefined function foo()),直接反映问题本质。GET /index.php HTTP/1.1" 500),帮助关联错误与具体请求。PHP代码致命错误
示例:PHP Fatal error: Uncaught Error: Call to undefined function foo() in /var/www/my_script.php:12
含义:脚本调用了未定义的函数foo(),导致程序终止。
可能原因:函数名拼写错误、未包含对应的库文件、扩展未安装。
PHP-FPM进程崩溃
示例:child exited on signal 7 (SIGBUS)
含义:进程因内存访问违规(如访问不存在的文件、内存越界)崩溃。
可能原因:脚本操作了无效的内存地址、文件系统错误。
数据库连接失败
示例:PDOException: SQLSTATE[HY000] [2002] Connection refused
含义:PHP无法连接到数据库(MySQL为例),常见于数据库未启动或连接参数错误。
可能原因:数据库服务未运行、host/port/username/password配置错误。
内存耗尽
示例:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)
含义:脚本使用的内存超过了memory_limit(默认128M)的限制。
可能原因:脚本存在内存泄漏、处理大数据量时未优化。
权限问题
示例:connect() to unix:/run/php/php7.4-fpm.sock failed (13: Permission denied)
含义:Web服务器(如Nginx)无法连接到PHP-FPM的Unix套接字,因权限不足。
可能原因:listen.owner/listen.group未设置为Web服务器用户(如www-data)、套接字目录权限错误。
PHP-FPM启动失败
示例:couldn't bind to socket /run/php/php7.4-fpm.sock (2: No such file or directory)
含义:PHP-FPM无法绑定到指定的套接字文件,导致服务无法启动。
可能原因:套接字文件目录不存在、端口已被占用、配置文件语法错误。
php -l script.php检查PHP脚本语法;用php-fpm -t测试PHP-FPM配置文件语法。www-data)有权访问脚本、目录及套接字文件(chown -R www-data:www-data /var/www)。memory_limit(如memory_limit = 256M)或优化代码(如减少大数组的使用);若进程崩溃频繁,可通过strace -p <PID>跟踪进程系统调用,定位崩溃原因。www.conf中设置slowlog = /var/log/php-fpm/slow.log和request_slowlog_timeout = 5s),记录执行时间超过阈值的脚本。