温馨提示×

debian apache日志怎样分析慢请求

小樊
48
2026-09-22 12:26:39
栏目: 智能运维

在 Debian 上分析 Apache 的慢请求(slow requests),一般从 日志配置 → 日志分析 → 定位瓶颈 三步来做。下面给你一套实用方案。


一、先确认 Apache 日志位置(Debian)

Debian 默认路径:

/var/log/apache2/access.log
/var/log/apache2/error.log

虚拟主机可能不同,查看配置:

grep -R "CustomLog" /etc/apache2/

二、开启「响应时间」日志(关键)

Apache 默认 不记录请求耗时,需要手动加。

1️⃣ 修改日志格式

编辑 Apache 配置(推荐新建文件):

sudo nano /etc/apache2/conf-available/logtime.conf

内容:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_time

说明:

  • %D:请求处理时间(微秒)
  • %T:秒(精度低)

启用:

sudo a2enconf logtime

2️⃣ 修改虚拟主机日志

sudo nano /etc/apache2/sites-enabled/000-default.conf

改成:

CustomLog ${APACHE_LOG_DIR}/access.log combined_time

重启:

sudo systemctl restart apache2

三、分析慢请求(实战命令)

1️⃣ 找出最慢的 10 个请求

awk '{print $NF, $0}' /var/log/apache2/access.log | sort -nr | head -10

$NF 是 %D(微秒)

示例:

5021000 ... GET /api/report ...

表示 5.02 秒


2️⃣ 只看超过 1 秒的请求

awk '$NF > 1000000' /var/log/apache2/access.log

3️⃣ 按 URL 统计平均响应时间

awk '{url=$7; time=$NF; sum[url]+=time; cnt[url]++} END {
  for (u in sum) printf "%d ms %s\n", sum[u]/cnt[u]/1000, u
}' /var/log/apache2/access.log | sort -nr | head

四、结合 error.log 看错误和超时

sudo tail -f /var/log/apache2/error.log

重点关注:

  • Timeout
  • AH0xxx
  • segmentation fault
  • PHP Fatal

五、进阶工具(推荐)

✅ GoAccess(实时可视化)

sudo apt install goaccess
goaccess /var/log/apache2/access.log -o report.html --log-format=COMBINED

✅ Apache mod_status(看实时请求)

sudo a2enmod status

访问:

http://localhost/server-status

✅ 后端慢?(PHP / DB)

  • PHP:slowlog
  • MySQL:slow_query_log
  • 如果是 PHP-FPM:
request_slowlog_timeout = 1s
slowlog = /var/log/php-fpm/slow.log

六、常见慢请求原因总结

原因 表现
数据库慢查询 固定接口慢
外部 API 超时 随机慢
锁文件 / session 并发时慢
静态资源过大 带宽问题
Apache 进程不够 server-status 全 busy

如果你愿意,可以:

  • 贴一段 access.log
  • 或说明是 PHP / WordPress / 接口
  • 或说 Apache 是 mpm_prefork / event

我可以帮你精准分析是哪一类慢请求。

0 踩