在 Debian 下排查 Apache 慢请求(慢查询),通常不是 Apache 直接记录“慢 SQL”,而是要从 访问日志、响应时间、后端应用 来判断。下面按常见场景给你一套实用做法。
Debian 中 Apache 日志一般在:
/var/log/apache2/
常见文件:
access.log —— 访问日志error.log —— 错误日志other_vhosts_access.log —— 虚拟主机日志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
假设日志格式已包含 %D,可这样查:
awk '$NF > 1000000 {print}' /var/log/apache2/access.log
awk '{print $NF, $0}' /var/log/apache2/access.log | sort -nr | head -20
Apache 本身不记录 PHP 慢执行,要看 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
如果是数据库慢:
mysqldumpslow /var/log/mysql/mysql-slow.log
或:
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
a2enmod status
<Location /server-status>
SetHandler server-status
Require local
</Location>
访问:
http://服务器IP/server-status
能看到当前请求及耗时状态。
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'
%D 日志或 PHP-FPM slowlogApache 的“慢查询”不是数据库慢查询,而是“慢请求”。
用
%D记录响应时间 + PHP-FPM slowlog + MySQL slowlog,是 Debian 下最标准的排查方式。
如果你愿意,可以把 access.log 示例 或 使用的架构(LAMP / LNMP / Docker) 发我,我可以帮你精确分析。