资源消耗分析需覆盖错误日志、慢查询日志、访问日志、PHP-FPM日志四大类,这些日志分别记录了资源异常、数据库负载、请求频率及PHP进程消耗的关键信息:
Out of memory错误提示内存不足);/var/log/php-fpm/error.log(PHP-FPM)或/var/log/apache2/error.log(Apache),需在php.ini中启用:log_errors = On
error_log = /var/log/php_errors.log
/etc/my.cnf配置文件,启用慢查询并设置阈值(单位:秒):slow_query_log = On
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2 # 超过2秒的查询视为慢查询
/var/log/apache2/access.log,Nginx为/var/log/nginx/access.log,默认记录请求时间、URL等信息。/var/log/php-fpm/access.log,需确保pm.status_path = /status(在php-fpm.conf中配置)以开启状态监控。通过grep、awk、sort等命令可快速提取资源消耗相关的信息:
combined,时间在第14列):awk '$14 > 1 {print $7, $14}' /var/log/nginx/access.log | sort -k2 -nr | head -10
($14 > 1表示响应时间超过1秒,$7为请求URL,$14为响应时间)grep -iE "out of memory|mysql connect failed" /var/log/php_errors.log
wc -l /var/log/mysql/slow-query.log
命令行工具仅能做初步分析,需借助专业工具深入定位瓶颈:
php.ini:zend_extension=xdebug.so
xdebug.mode=profile
xdebug.output_dir=/tmp/profiler
运行脚本后,用KCacheGrind或QCachegrind打开生成的cachegrind.out.*文件,可视化分析资源消耗热点。blackfire-php扩展后,通过命令行或Web界面生成报告,查看数据库查询、函数调用的资源占用情况。结合系统命令监控PHP进程的资源占用,验证日志分析结果:
top -c | grep php-fpm
或使用htop(需安装):htop
iostat:iostat -x 1 5
关注%util(磁盘利用率)和await(平均等待时间)。避免日志文件过大占用磁盘空间,影响资源监控:
logrotate配置日志轮转(以PHP错误日志为例),编辑/etc/logrotate.d/php:/var/log/php_errors.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
该配置表示每日轮转,保留7天压缩日志,空日志不轮转。通过以上步骤,可从日志中提取资源消耗的关键信息,结合工具深度分析,最终定位并解决PHP应用中的资源瓶颈问题。