Linux中php-fpm错误日志分析与排查指南
php-fpm的错误日志路径取决于Linux发行版和具体配置,常见位置包括:
/var/log/php-fpm/error.log(通用路径)/var/log/php7.x-fpm.log(带PHP版本号,如php7.4-fpm.log)/var/log/php-fpm/www-error.log(部分配置中单独存放)sudo find /var/log -name "*php-fpm*log" # 搜索日志文件
sudo tail -f /var/log/php-fpm/error.log # 实时查看最新错误
grep提取错误、警告或特定关键词(如“502”“Permission denied”):sudo grep 'error' /var/log/php-fpm/error.log # 提取错误信息
sudo grep 'warning' /var/log/php-fpm/error.log # 提取警告信息
sudo grep '502' /var/log/php-fpm/error.log # 提取502网关错误
sort和uniq找出最常见的错误(如脚本语法错误、权限问题):sudo grep 'PHP Parse error' /var/log/php-fpm/error.log | sort | uniq -c | sort -rn
/var/log/nginx/error.log或/var/log/apache2/error.log),确认错误来源是否来自php-fpm。sudo systemctl status php-fpm(若未运行,执行sudo systemctl restart php-fpm);/etc/php/7.x/fpm/pool.d/www.conf中的listen指令)与Nginx配置一致(如fastcgi_pass 127.0.0.1:9000;);sudo netstat -tulnp | grep 9000(确认php-fpm是否监听指定端口)。www-data)无权访问脚本、目录或套接字文件。sudo chown -R www-data:www-data /run/php(若使用Unix socket);sudo nano /etc/php/7.x/fpm/pool.d/www.conf(确保user和group设置为www-data);sudo chmod -R 755 /var/www/html(赋予web目录读写权限)。memory_limit限制,或pm.max_children设置过高导致内存溢出。php.ini(/etc/php/7.x/fpm/php.ini),修改memory_limit = 256M(根据服务器内存调整);pm.max_children(如从50降至30,避免内存过载);php -l /var/www/html/script.php(快速验证语法);php-fpm.conf中添加slowlog = /var/log/php-fpm/slow.log和request_slowlog_timeout = 10s(记录执行超过10秒的脚本);tail -f /var/log/php-fpm/slow.log查看慢脚本,优化数据库查询(如添加索引)或外部请求。测试配置文件语法:
修改php-fpm配置文件后,使用以下命令验证语法是否正确:
sudo php-fpm7.x -t # 如php-fpm7.4 -t
若输出“Configuration file is valid”,则语法正确。
以调试模式运行:
若无法定位问题,可开启调试模式(php-fpm.conf中设置log_level = debug),重启服务后查看详细日志。
使用日志分析工具:
对于海量日志,可使用ELK(Elasticsearch+Logstash+Kibana)、Splunk或Graylog等工具,实现日志的集中存储、搜索和可视化分析(如统计错误趋势、关联多个日志源)。
logrotate切割php-fpm日志,避免日志文件过大(如每天生成一个新日志文件);