Linux下PHP-FPM日志有效分析指南
PHP-FPM的日志路径由配置文件决定,常见位置为/var/log/php-fpm/目录下的access.log(访问日志)、error.log(错误日志)和slow.log(慢日志)。可通过以下命令确认:
ls /var/log/php-fpm/ # 查看目录下日志文件
cat /etc/php-fpm.d/www.conf | grep -E 'slowlog|error_log' # 检查配置文件中的日志路径
若未找到,可检查主配置文件/etc/php-fpm.conf或/etc/php/版本号/fpm/php-fpm.conf。
tail -f /var/log/php-fpm/error.log:实时查看错误日志最新内容,快速定位运行时错误(如PHP语法错误、数据库连接失败)。less +F /var/log/php-fpm/access.log:分页查看访问日志,支持实时滚动,适合分析请求流量模式。grep 'error' /var/log/php-fpm/error.log:筛选包含“error”的日志行,快速定位错误类型(如“PHP Fatal error”)。grep '/api/orders' access.log | wc -l:统计特定接口(如/api/orders)的请求总数,评估接口热度。awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10:提取访问日志中的IP地址,统计并排序前10个高频访问IP,识别异常流量(如恶意爬虫)。慢日志记录执行时间超过阈值的请求,是优化性能的关键。需先开启慢日志(见下文“慢日志配置”),再用以下命令分析:
tail -f /var/log/php-fpm/slow.log:实时查看慢日志,关注执行时间长的脚本(如script.php)和SQL查询。awk '{print $2, $NF}' slow.log | sort | uniq -c | sort -nr:提取慢日志中的脚本路径和执行时间,统计每个脚本的总耗时,定位性能瓶颈(如某脚本累计耗时过长)。慢日志需手动开启,配置步骤如下:
/etc/php-fpm.d/www.conf),添加/修改以下参数:slowlog = /var/log/php-fpm/slow.log # 慢日志文件路径
request_slowlog_timeout = 1000 # 慢请求阈值(单位:毫秒,如1000ms=1秒)
sudo systemctl restart php-fpm
pt-query-digest(Percona Toolkit工具)生成可视化报告,识别最耗时的查询和脚本:pt-query-digest /var/log/php-fpm/slow.log > slow_report.txt
报告会包含执行时间排名、调用堆栈等信息,帮助定位性能问题(如慢SQL、循环嵌套过深)。对于大规模日志,手动分析效率低,可使用以下工具提升效率:
tail -f /var/log/php-fpm/error.log,搜索“500”或“PHP Fatal error”,定位具体错误(如未定义函数、数据库查询失败)。fastcgi_pass指向正确的PHP-FPM监听地址(如127.0.0.1:9000)。tail -f /var/log/php-fpm/slow.log,分析执行时间长的脚本和SQL查询。pm.max_children)、调整进程回收策略(pm.max_requests),避免进程耗尽。tail -f /var/log/php-fpm/error.log,搜索“child exited”、“pool exhausted”,确认是否因进程数不足导致。pm.max_children(如从10调整为50),根据服务器内存调整(每个进程约占用10-20MB内存)。sudo systemctl restart php-fpm,释放占用资源。logrotate工具定期压缩和删除旧日志,避免日志文件过大占用磁盘空间。配置文件通常位于/etc/logrotate.d/php-fpm。log_level(如error记录关键错误,debug记录详细调试信息),生产环境建议设置为error以减少日志量。/var/log/php-fpm/目录属主为root,属组为www-data,权限为750),避免敏感信息泄露。