在Ubuntu环境中,并发请求的分析需围绕PHP运行环境(PHP-FPM/Apache/Nginx)及关联服务(数据库、缓存)的日志展开,关键日志路径如下:
/var/log/php-fpm.log或/var/log/php{version}-fpm.log(如php7.4-fpm.log)。/var/log/apache2/access.log(记录所有HTTP请求,含并发时间戳);/var/log/nginx/access.log(同理,格式更轻量)。/var/log/mysql/slow-query.log),记录执行时间超过阈值的SQL语句。通过日志提取以下指标,可量化并发请求的状态:
pm.max_children参数定义了最大子进程数,若日志中出现“pool reached max children”警告,说明并发请求超过配置上限,需扩容。ps aux | grep php-fpm | grep -v grep | wc -l request_duration(请求耗时)字段,若大量请求耗时超过1秒,说明并发处理能力不足。grep -E 'request_slowlog_timeout' /var/log/php-fpm.log | awk '{print $0, $NF}' [11/Oct/2025:10:00:00 +0000]),可通过awk按分钟/秒分组,统计单位时间内的请求数,识别并发高峰时段。awk '{print $4}' /var/log/nginx/access.log | cut -d'[' -f2 | cut -d':' -f1,2 | sort | uniq -c | sort -nr /var/log/php_errors.log)中的E_WARNING、E_ERROR计数,若并发时错误率显著上升,说明代码存在并发安全问题(如全局变量冲突、文件锁缺失)。实时查看PHP-FPM状态:
sudo tail -f /var/log/php-fpm.log | grep -E 'pool|status' 输出示例:[11/Oct/2025:10:05:00] NOTICE: [pool www] 10 active processes, 2 idle processes(10个活跃进程说明当前并发数)。
统计并发高峰时段:
awk '{print $4}' /var/log/nginx/access.log | cut -d'[' -f2 | cut -d':' -f1,2 | sort | uniq -c | head -10 输出示例:350 [11/Oct/2025:10:00:00(10:00时段有350个请求,为并发高峰)。
提取慢请求详情:
grep 'slow' /var/log/php-fpm.log | awk '{print $0, $NF}' | less 输出示例:[11/Oct/2025:10:01:30] WARNING: slow request (1.5s) for URI /api/data.php(该请求耗时1.5秒,需优化)。
ELK Stack(Elasticsearch+Logstash+Kibana):
将PHP-FPM、访问日志导入Elasticsearch,通过Kibana创建仪表盘,可视化“并发连接数”“请求耗时分布”“错误率趋势”等指标,适合大规模集群分析。
Swoole实时分析:
使用Swoole的异步IO能力,编写脚本实时统计IP访问频率、请求响应时间分布(如前文提到的LogAnalyzer类),适合高并发场景的实时监控。
并发连接数超标:
pm.max_children设置过小,会导致“pool reached max children”错误,需调整配置(/etc/php/{version}/fpm/pool.d/www.conf)并重启服务:pm.max_children = 50 ; 根据服务器内存调整(每个进程约占用10-20MB内存) 慢请求拖慢并发:
long_query_time=1),需优化SQL语句(添加索引、拆分复杂查询)或启用数据库连接池。并发安全问题:
flock加锁),避免并发冲突。通过以上步骤,可系统分析Ubuntu环境中PHP日志中的并发请求问题,定位瓶颈并优化系统性能。