温馨提示×

nginx响应慢日志怎么看

小樊
36
2026-10-17 06:50:40
栏目: 编程语言

在 Nginx 中,“响应慢”通常可以通过慢日志(slow log)或响应时间相关日志来分析。Nginx 本身没有像 MySQL 那样的 slow log 概念,但可以通过以下几种方式来实现“看慢请求”。


一、通过 access_log 记录响应时间(最常用)

1. 在 log_format 中加入耗时变量

编辑 nginx.conf:

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

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

关键变量说明

变量 含义
$request_time 客户端总耗时(从请求到响应完成)
$upstream_response_time 后端(如 PHP、Java)响应时间
$upstream_connect_time 连接后端耗时
$upstream_header_time 后端返回头耗时

2. 查看慢请求

例如:查看响应时间 > 1s 的请求

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

或:

grep 'rt=2.' /var/log/nginx/access.log

二、使用 limit_rate / timeout 定位问题(辅助)

虽然不是日志,但可辅助判断:

proxy_read_timeout 5s;
proxy_connect_timeout 3s;

超时请求会在 error.log 中出现:

upstream timed out (110: Connection timed out)

三、通过 error_log 看异常慢(系统级)

error_log /var/log/nginx/error.log warn;

常见慢相关错误:

  • upstream timed out
  • worker process timed out
  • connect() failed

四、用 nginx-module-vts(可视化慢接口)

如果你需要统计哪些接口慢:

  • 安装 nginx-module-vts
  • 查看:
    • 每个 location 的平均响应时间
    • 慢请求占比

五、高阶:Lua / OpenResty 自定义慢日志

local start = ngx.now()
-- 业务逻辑
local cost = ngx.now() - start
if cost > 1 then
    ngx.log(ngx.WARN, "slow request: ", cost)
end

六、快速排查思路(实战)

  1. 看 $request_time 大不大
    • 大 → 客户端或网络问题
  2. 看 $upstream_response_time 大不大
    • 大 → 后端慢(PHP / Java / DB)
  3. 看 $upstream_connect_time 大
    • 后端连接慢 / 连接池满

如果你愿意,可以:

  • 贴一段 access_log
  • 或说明你是 PHP / Java / 静态文件
  • 我可以帮你精确分析是哪一层慢

0 踩