温馨提示×

如何定位centos apache慢日志

小樊
39
2026-09-30 06:51:22
栏目: 智能运维

在 CentOS 上“定位 Apache 慢日志”通常分三步:确认是否开启慢日志 → 找到慢日志位置 → 分析慢请求。下面按实战流程说明。


一、Apache 慢日志是什么

Apache 本身没有像 MySQL 那样的 slow log,但可以通过以下两种方式实现“慢请求日志”:

  1. mod_log_config:记录响应时间,自行判断“慢”
  2. mod_status / 第三方模块(如 mod_reqtimeout)
  3. Forensic / trace 日志(高级)

最常用的是 访问日志中记录响应时间。


二、确认 Apache 是否记录响应时间

1. 查看 Apache 配置

httpd -v
rpm -qc httpd

常见配置文件:

  • /etc/httpd/conf/httpd.conf
  • /etc/httpd/conf.d/*.conf

2. 检查 LogFormat 是否包含 %D 或 %T

grep -R "LogFormat" /etc/httpd/

示例(推荐):

LogFormat "%h %l %u %t \"%r\" %>s %b %D" combined_time

说明:

  • %D:请求处理时间(微秒)
  • %T:秒(不够精确)

3. 启用慢日志格式(如果没有)

编辑配置文件:

vi /etc/httpd/conf/httpd.conf

修改或新增:

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

或单独:

CustomLog logs/access_time.log combined_time

重启 Apache:

systemctl restart httpd

三、定位“慢请求”

1. 访问日志位置

ls -l /var/log/httpd/

常见:

  • access_log
  • error_log
  • slow_log(如果你新建的)

2. 找出响应时间 > 1 秒的请求

假设 %D 是微秒:

awk '{if ($NF > 1000000) print}' /var/log/httpd/access_log

或只看 URL:

awk '($NF+0 > 1000000){print $7}' /var/log/httpd/access_log

3. 排序最慢的 10 个请求

awk '{print $NF, $7}' /var/log/httpd/access_log | sort -nr | head

四、结合 error_log 看异常

tail -f /var/log/httpd/error_log

重点关注:

  • timed out
  • child process
  • segfault
  • AH0xxx

五、进阶方案(可选)

1. 使用 mod_status

httpd -M | grep status
<Location /server-status>
    SetHandler server-status
    Require ip 127.0.0.1
</Location>

访问:

http://localhost/server-status

2. 使用 apachetop

yum install epel-release -y
yum install apachetop -y
apachetop -f /var/log/httpd/access_log

六、总结(快速排查顺序)

  1. 确认 LogFormat 有 %D
  2. 从 access_log 筛 > 1s 请求
  3. 对应 error_log 看报错
  4. 必要时开 server-status

如果你愿意,可以把 Apache 版本 + 一段匿名化日志 发出来,我可以帮你直接分析慢在哪。

0 踩