在 Debian 上分析 Apache 的慢请求(slow requests),一般从 日志配置 → 日志分析 → 定位瓶颈 三步来做。下面给你一套实用方案。
Debian 默认路径:
/var/log/apache2/access.log
/var/log/apache2/error.log
虚拟主机可能不同,查看配置:
grep -R "CustomLog" /etc/apache2/
Apache 默认 不记录请求耗时,需要手动加。
编辑 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
sudo nano /etc/apache2/sites-enabled/000-default.conf
改成:
CustomLog ${APACHE_LOG_DIR}/access.log combined_time
重启:
sudo systemctl restart apache2
awk '{print $NF, $0}' /var/log/apache2/access.log | sort -nr | head -10
$NF是%D(微秒)
示例:
5021000 ... GET /api/report ...
表示 5.02 秒
awk '$NF > 1000000' /var/log/apache2/access.log
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
sudo tail -f /var/log/apache2/error.log
重点关注:
TimeoutAH0xxxsegmentation faultPHP Fatalsudo apt install goaccess
goaccess /var/log/apache2/access.log -o report.html --log-format=COMBINED
sudo a2enmod status
访问:
http://localhost/server-status
slowlogslow_query_logrequest_slowlog_timeout = 1s
slowlog = /var/log/php-fpm/slow.log
| 原因 | 表现 |
|---|---|
| 数据库慢查询 | 固定接口慢 |
| 外部 API 超时 | 随机慢 |
| 锁文件 / session | 并发时慢 |
| 静态资源过大 | 带宽问题 |
| Apache 进程不够 | server-status 全 busy |
如果你愿意,可以:
我可以帮你精准分析是哪一类慢请求。