Ubuntu PHP日志中的并发请求分析指南
在Ubuntu环境下做PHP并发请求分析,说复杂也谈不上,关键是找对日志来源和关键指标。通常得从PHP-FPM、Apache、Nginx这些运行环境下手,再结合数据库和缓存的日志,基本就能把并发情况摸清楚。下面是几个最常打交道的日志位置。

- PHP-FPM日志:进程池状态、请求处理时间、并发连接数都记在这里,是并发分析的核心。默认路径要么是
/var/log/php-fpm.log,要么是/var/log/php{version}-fpm.log(比如php7.4-fpm.log)。 - Web服务器日志:
- Apache的话看
/var/log/apache2/access.log,所有HTTP请求以及并发时间戳都记着。 - Nginx则是
/var/log/nginx/access.log,格式更轻量,内容一样靠谱。
- Apache的话看
- 慢查询日志:如果并发请求伴随数据库瓶颈,记得开启MySQL慢查询日志(
/var/log/mysql/slow-query.log),专门记录那些执行时间超过阈值的SQL语句。
二、并发请求的关键指标解析
从日志里提取下面几个指标,并发请求的现状就能量化出来。
-
并发连接数:
- PHP-FPM的
pm.max_children参数决定了最大子进程数。如果日志里出现“pool reached max children”警告,说明并发请求已经超了配置上限,得扩容。 - 举个例子,想看看当前PHP-FPM进程数,可以敲:
ps aux | grep php-fpm | grep -v grep | wc -l
- PHP-FPM的
-
请求处理时间:
- PHP-FPM日志里有个
request_duration字段,记录每个请求的耗时。如果大批请求耗时超过1秒,那并发处理能力就有点吃紧了。 - 提取慢请求的命令也很直接:
grep -E 'request_slowlog_timeout' /var/log/php-fpm.log | awk '{print $0, $NF}'
- PHP-FPM日志里有个
-
并发请求分布:
- 访问日志里的时间戳(比如
[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
- 访问日志里的时间戳(比如
-
错误并发率:
- PHP错误日志(
/var/log/php_errors.log)里会记录E_WARNING、E_ERROR等计数。如果并发时错误率明显上涨,那很可能是代码里存在并发安全问题,比如全局变量冲突、文件锁缺失。
- PHP错误日志(
三、常用分析工具与命令
1. 命令行工具(快速定位问题)
-
实时查看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秒,需要优化。
2. 可视化工具(深度分析趋势)
-
ELK Stack(Elasticsearch+Logstash+Kibana):把PHP-FPM日志和访问日志导进Elasticsearch,然后用Kibana建个仪表盘,并发连接数、请求耗时分布、错误率趋势一目了然。特别适合大规模集群的场景。
-
Swoole实时分析:用Swoole的异步IO能力写个脚本,实时统计IP访问频率、请求响应时间分布(比如前面提到的
LogAnalyzer类),高并发场景下做实时监控很管用。
四、常见问题排查方向
-
并发连接数超标:
- 如果PHP-FPM的
pm.max_children设置得过小,日志里就会出现“pool reached max children”错误。解决办法是调整配置(/etc/php/{version}/fpm/pool.d/www.conf),然后重启服务:pm.max_children = 50; // 根据服务器内存调整,每个进程大约占用10-20MB内存
- 如果PHP-FPM的
-
慢请求拖慢并发:
- 如果慢查询日志里出现大量长SQL(比如
long_query_time=1),那就得优化SQL语句(加索引、拆分复杂查询),或者启用数据库连接池来缓解压力。
- 如果慢查询日志里出现大量长SQL(比如
-
并发安全问题:
- 错误日志中若出现“Undefined variable”“Race condition”之类的警告,得检查代码中的全局变量和文件操作,比如用
flock加锁,避免并发冲突。
- 错误日志中若出现“Undefined variable”“Race condition”之类的警告,得检查代码中的全局变量和文件操作,比如用
通过以上步骤,Ubuntu环境下的PHP并发请求问题就能系统性地分析出来,瓶颈在哪、性能怎么优化,也就有了清晰的方向。