apache本身不自动标记高耗时请求,需配置%d字段记录微秒级处理耗时,并结合awk等工具筛选≥500ms请求;java后端耗时须由应用通过x-response-time响应头传递并用%{x-response-time}o捕获,再与%d对比定位瓶颈。

Apache 本身不自动标记“高耗时请求”,但可通过配置日志字段 + 定制筛选逻辑,实现对慢请求的精准捕获与后续分析。核心是用 %D 记录 Apache 层处理耗时(微秒级),再结合日志分析工具快速识别异常值。
启用并配置含耗时字段的日志格式
确保 mod_log_config 已加载(运行 httpd -M | grep log_config 验证)。在 httpd.conf 或虚拟主机配置中添加:
- 定义带 %D 的格式(推荐):
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" timed_combined - 启用该格式:
CustomLog logs/access_log timed_combined - 重启 Apache 生效:
sudo systemctl reload apache2(Debian/Ubuntu)或sudo apachectl graceful(RHEL/CentOS)
区分两类“高耗时”并针对性配置
%D 高 ≠ 后端慢,需结合上下文判断瓶颈位置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 若只关心 Apache 自身响应慢(如 Rewrite 规则复杂、SSL 解密卡顿、Gzip 压缩耗时),%D 就是直接指标;超过 500000 微秒(500 ms)可视为高耗时请求
- 若想定位 Java/Tomcat 等后端真实处理慢,必须由应用写入响应头(如
X-Response-Time),Apache 再用%{X-Response-Time}o捕获;此时对比%D和%{X-Response-Time}o:差值大说明 Apache 层有开销,两者都大说明后端或网络有问题 - 注意:不要用
%T替代%D,它只记录整秒数,精度不足,无法识别 800 ms 和 1200 ms 的差异
快速筛选和分析高耗时请求
日志写入后,用命令行即时分析(无需导入数据库):
- 找出耗时 ≥ 500 ms 的请求(
%D单位是微秒):awk '$NF >= 500000 {print}' access_log | head -20 - 按耗时倒序列出前 10 条最慢请求:
awk '{print $NF, $0}' access_log | sort -nr | head -10 | cut -d' ' -f2- - 统计每类 URL 的平均耗时(便于发现慢接口):
awk '$NF>=100000 {url=$7; sum[url]+=$NF; cnt[url]++} END {for (u in sum) print u, sum[u]/cnt[u] "μs"}' access_log | sort -k2 -nr
配合错误日志交叉验证
高耗时请求常伴随超时、连接中断等现象。开启详细错误日志有助于归因:
- 在配置中设置:
LogLevel warn(全局)或针对虚拟主机设为error - 启用带上下文的错误日志格式:
ErrorLogFormat "[%{cu}t] [client %a] %M% , referer %R" - 检查是否出现
AH01075: Error dispatching request to(后端无响应)、Connection reset(客户端断连)等线索










