温馨提示×

如何定位apache慢请求日志

小樊
37
2026-09-13 06:50:17
栏目: 编程语言

定位 Apache 中的慢请求日志,通常可以从以下几个层面入手:Apache 自带日志、模块扩展、系统/代理层分析。下面按实用程度由高到低说明。


一、使用 Apache 自带日志(最基础)

1. 访问日志中的响应时间字段

Apache 默认访问日志不一定包含耗时,但可以通过 LogFormat 增加 %D%T

修改 httpd.conf / apache2.conf

LogFormat "%h %l %u %t \"%r\" %>s %b %D" combined_time
CustomLog logs/access_log combined_time

字段说明:

  • %D:请求处理时间(微秒)
  • %T:秒(整数)

示例日志

127.0.0.1 - - [10/Oct/2024:10:00:00] "GET /api/test HTTP/1.1" 200 1024 2500000

→ 2.5 秒(慢请求)

筛选慢请求

awk '$NF > 1000000' access_log

(>1 秒)


二、使用 mod_log_config + 自定义字段(推荐)

更清晰的方式:

LogFormat "%h %t \"%r\" %>s %b %Dms" slow_log
CustomLog logs/slow.log slow_log

然后:

grep -E "[0-9]{7}ms" logs/slow.log

三、使用 mod_status(实时查看)

启用 mod_status

<Location /server-status>
    SetHandler server-status
    Require local
</Location>
ExtendedStatus On

访问:

http://localhost/server-status

可看到:

  • 当前请求
  • 请求耗时
  • 哪个 URL 慢

四、使用第三方模块(专业级)

1. mod_log_slow(专为慢请求设计)

  • 只记录超过阈值的请求
  • 配置简单

示例:

LogSlowEnabled On
LogSlowLongRequestTime 1.0
LogSlowLogFile logs/slow_request.log

五、后端 / 应用层定位(很重要)

Apache 慢 ≠ Apache 本身慢,常见原因:

  • PHP / Java / Python 处理慢
  • 数据库查询慢
  • 外部接口超时

建议:

  • PHP:slowlog(php-fpm)
  • MySQL:slow query log
  • Nginx/Apache 前面有代理时,看代理日志

六、操作系统层辅助

top
iotop
strace -p <pid>

七、总结建议

最快方案

给 Apache 访问日志加 %D,然后用脚本筛慢请求

长期方案

mod_log_slow + 应用层慢日志

如果你愿意,可以告诉我:

  • Apache 版本(2.2 / 2.4)
  • 是否使用 PHP / Java
  • 是否在前端有 Nginx

我可以给你一套可直接用的配置

0