在 Nginx 中,“响应慢”通常可以通过慢日志(slow log)或响应时间相关日志来分析。Nginx 本身没有像 MySQL 那样的 slow log 概念,但可以通过以下几种方式来实现“看慢请求”。
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 |
后端返回头耗时 |
例如:查看响应时间 > 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 outworker process timed outconnect() failednginx-module-vts(可视化慢接口)如果你需要统计哪些接口慢:
nginx-module-vtslocation 的平均响应时间local start = ngx.now()
-- 业务逻辑
local cost = ngx.now() - start
if cost > 1 then
ngx.log(ngx.WARN, "slow request: ", cost)
end
$request_time 大不大
$upstream_response_time 大不大
$upstream_connect_time 大
如果你愿意,可以: