Linux PHP-FPM错误日志怎么排查
1. 定位PHP-FPM错误日志位置
Linux系统中,PHP-FPM错误日志的默认路径通常为/var/log/php-fpm/error.log
或/var/log/php7.x-fpm.log
(7.x
为具体PHP版本号)。部分系统可能将日志分散在/var/log/php-fpm/www-error.log
(虚拟主机错误)或/var/log/php-fpm/access.log
(访问日志)。若路径不确定,可通过以下命令查找:
- 检查PHP-FPM主配置文件(
/etc/php-fpm.conf
)中的error_log
指令; - 查看虚拟主机池配置(
/etc/php/7.x/fpm/pool.d/www.conf
)中的php_admin_value[error_log]
设置; - 使用
php -i | grep error_log
命令查看全局错误日志路径。
2. 实时查看与过滤错误日志
使用tail
命令实时监控错误日志的最新内容(适用于排查正在发生的错误):
sudo tail -f /var/log/php-fpm/error.log
若需筛选特定类型的错误(如“fatal error”“permission denied”),可结合grep
命令:
sudo tail -f /var/log/php-fpm/error.log | grep -E "fatal|permission"
这能快速定位关键错误信息,避免被大量无关日志干扰。
3. 分析常见错误类型及解决方法
-
502 Bad Gateway(网关错误)
原因:PHP-FPM进程崩溃、未启动,或Nginx/Apache与PHP-FPM的通信配置不一致(如监听地址/端口不匹配)。
解决:- 检查PHP-FPM服务状态:
sudo systemctl status php-fpm
,若未运行则启动:sudo systemctl start php-fpm
; - 确认PHP-FPM监听配置(
www.conf
中的listen
指令)与Web服务器配置一致(如Nginx中的fastcgi_pass
指令)。
- 检查PHP-FPM服务状态:
-
504 Gateway Timeout(网关超时)
原因:PHP脚本执行时间超过request_terminate_timeout
设置,或PHP-FPM进程资源不足(如pm.max_children
过小)。
解决:- 调整脚本超时时间:编辑
php-fpm.conf
,增加request_terminate_timeout = 300
(单位:秒); - 增加进程池大小:调整
pm.max_children
(根据服务器内存计算,如每进程占用100MB内存,1GB内存可设置为pm.max_children = 10
)。
- 调整脚本超时时间:编辑
-
Permission Denied(权限拒绝)
原因:PHP-FPM进程用户(如www-data
)无权访问脚本、目录或套接字文件。
解决:- 确保脚本及目录权限正确:
sudo chown -R www-data:www-data /var/www/html
(替换为实际项目路径),sudo chmod -R 755 /var/www/html
; - 检查
www.conf
中的listen.owner
和listen.group
设置,确保与运行用户一致(如listen.owner = www-data
,listen.group = www-data
)。
- 确保脚本及目录权限正确:
-
Memory Exhausted(内存耗尽)
原因:PHP脚本占用内存超过memory_limit
设置(如memory_limit = 128M
)。
解决:- 增加内存限制:编辑
php.ini
,修改memory_limit = 256M
(根据实际需求调整); - 优化脚本:减少不必要的变量存储、分批处理大数据(如使用
LIMIT
分页查询数据库)。
- 增加内存限制:编辑
-
Primary Script Unknown(主脚本未知)
原因:Nginx未正确传递脚本路径到PHP-FPM(如SCRIPT_FILENAME
参数设置错误)。
解决:- 检查Nginx虚拟主机配置,确保包含以下指令:
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 与PHP-FPM监听地址一致 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
- 验证
root
指令指向的项目路径是否正确。
- 检查Nginx虚拟主机配置,确保包含以下指令:
4. 检查配置文件语法
在修改PHP-FPM配置文件(如php-fpm.conf
或www.conf
)后,需验证语法是否正确,避免因配置错误导致服务无法启动:
sudo php-fpm7.x -t # 替换为实际PHP版本号,如php-fpm8.2
若输出Configuration file is valid
则表示语法正确;若提示错误(如“directive not found”),需根据提示修正配置文件中的错误。
5. 调试与高级排查
- 开启详细日志:若错误信息不明确,可调整
php-fpm.conf
中的log_level
为debug
(默认为notice
),重启服务后查看更详细的日志信息:log_level = debug sudo systemctl restart php-fpm
- 使用strace跟踪进程:若进程异常退出,可使用
strace
命令跟踪进程的系统调用,定位崩溃原因:sudo strace -f -p $(pgrep php-fpm) # pgrep获取PHP-FPM进程ID
- 检查系统资源:使用
top
、htop
或df -h
命令查看CPU、内存、磁盘空间是否充足,资源不足可能导致PHP-FPM进程被系统杀死。
6. 重启PHP-FPM服务
修改配置文件或修复问题后,需重启PHP-FPM服务使更改生效:
sudo systemctl restart php-fpm # 大多数现代Linux系统
或使用传统service
命令:
sudo service php-fpm restart # 旧版系统
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux PHP-FPM错误日志怎么排查
本文地址: https://pptw.com/jishu/730515.html