温馨提示×

Debian Apache日志中如何查找慢查询

小樊
51
2026-06-30 16:00:33
栏目: 智能运维

Debian 下排查 Apache 慢请求(慢查询),通常不是 Apache 直接记录“慢 SQL”,而是要从 访问日志、响应时间、后端应用 来判断。下面按常见场景给你一套实用做法。


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

Debian 中 Apache 日志一般在:

/var/log/apache2/

常见文件:

  • access.log —— 访问日志
  • error.log —— 错误日志
  • other_vhosts_access.log —— 虚拟主机日志

二、在 access.log 中查找慢请求(最常用)

1️⃣ 确保 Apache 记录响应时间

Apache 默认 不记录响应时间,需要手动开启。

编辑站点配置或 apache2.conf

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_time
CustomLog ${APACHE_LOG_DIR}/access.log combined_time

%D:请求耗时(微秒

重载 Apache:

systemctl reload apache2

2️⃣ 查找响应时间慢的访问记录

假设日志格式已包含 %D,可这样查:

查找超过 1 秒的请求(1 秒 = 1,000,000 微秒)

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

按响应时间排序,找出最慢的 20 条

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

三、使用 Apache + PHP / 数据库的慢查询场景

情况 1:Apache + PHP(FPM 或 mod_php)

Apache 本身不记录 PHP 慢执行,要看 PHP-FPM 慢日志

PHP-FPM 慢日志(非常重要)

编辑 pool 配置(Debian 常见路径):

/etc/php/*/fpm/pool.d/www.conf

开启:

request_slowlog_timeout = 2s
slowlog = /var/log/php-fpm-slow.log

重启:

systemctl restart php*-fpm

查看慢请求:

tail -f /var/log/php-fpm-slow.log

情况 2:慢查询来自 MySQL

如果是数据库慢:

mysqldumpslow /var/log/mysql/mysql-slow.log

或:

mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log

四、使用 Apache mod_status(实时)

1️⃣ 启用 mod_status

a2enmod status

2️⃣ 配置访问

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

访问:

http://服务器IP/server-status

能看到当前请求及耗时状态。


五、用 grep 快速排查(临时手段)

找出访问量大的慢接口

awk '{print $7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head

查找某个接口响应时间异常

grep "/api/xxx" /var/log/apache2/access.log | awk '$NF > 1000000'

六、推荐排查顺序(实战建议)

  1. ✅ 开启 %D 日志或 PHP-FPM slowlog
  2. ✅ 定位「耗时接口」
  3. ✅ 确认是:
    • Apache 本身慢
    • PHP 慢
    • 数据库慢
    • 网络 / 第三方接口慢

七、一句话总结

Apache 的“慢查询”不是数据库慢查询,而是“慢请求”。

%D 记录响应时间 + PHP-FPM slowlog + MySQL slowlog,是 Debian 下最标准的排查方式。

如果你愿意,可以把 access.log 示例使用的架构(LAMP / LNMP / Docker) 发我,我可以帮你精确分析。

0