温馨提示×

nginx日志慢请求怎么查

小樊
44
2026-10-10 05:23:58
栏目: 编程语言

在 Nginx 中排查“慢请求”,一般从 日志配置 + 日志分析 + 定位方向 三步来做。下面按实战方式说。


一、先确认 Nginx 是否记录了“请求耗时”

1. 查看 log_format 是否包含耗时字段

Nginx 默认日志 不包含耗时,需要手动加。

常见慢请求相关变量:

  • $request_time:客户端整个请求耗时(含网络)
  • $upstream_response_time:后端(PHP/Java 等)处理耗时
  • $upstream_connect_time:连接后端耗时
  • $upstream_header_time:后端返回 header 耗时

2. 修改 nginx.conf

http {
    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status '
                    'rt=$request_time urt=$upstream_response_time uct=$upstream_connect_time';

    access_log /var/log/nginx/access.log main;
}

然后:

nginx -t
nginx -s reload

二、查慢请求的常用命令

1. 查耗时最长的请求(Top N)

awk '{print $NF, $7}' /var/log/nginx/access.log | sort -rn | head -20

如果 log_format 如上:

awk '{print $1, $7}' /var/log/nginx/access.log | sort -rn | head

2. 查超过 1 秒的请求

awk '$NF > 1 {print}' /var/log/nginx/access.log

3. 按 URL 聚合平均耗时

awk '{url=$7; rt=$1; sum[url]+=rt; cnt[url]++} END {
  for (u in sum) print sum[u]/cnt[u], u
}' access.log | sort -rn | head

三、区分“慢在哪里”

情况 1:request_time 大,但 upstream_response_time 小

✅ 问题在 Nginx 或网络

  • 客户端网速慢
  • Nginx 写日志慢
  • 大文件下载 / 上传

情况 2:upstream_response_time 很大

✅ 问题在后端

  • 数据库慢查询
  • 接口阻塞
  • 后端线程池满

四、进阶:实时看慢请求

1. 实时 tail + 过滤

tail -f /var/log/nginx/access.log | awk '$NF > 1'

2. 使用 ngxtop(推荐)

pip install ngxtop
ngxtop -l /var/log/nginx/access.log

五、常见慢请求原因总结

  • 后端接口慢(最常见)
  • SQL 没加索引
  • 静态资源过大
  • HTTPS 握手频繁(没开 keepalive)
  • Nginx + 后端不在同机房
  • DNS 解析慢

如果你愿意,可以把:

  • Nginx 版本
  • 当前 log_format
  • 是 静态站 / 反向代理 / 接口服务

发出来,我可以直接帮你写一套「慢请求排查方案」。

0 踩