linux

nginx日志里隐藏的性能瓶颈在哪

小樊
32
2025-12-31 00:05:26
栏目: 编程语言

Nginx日志里隐藏的性能瓶颈定位指南

一、先确认日志能回答的关键问题

二、用日志快速定位瓶颈的判读规则

三、从日志到根因的排查路径

四、容易被忽视的“日志侧”瓶颈

五、可直接套用的日志配置与排查命令

log_format main_detailed '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for" '
                       'request_time=$request_time '
                       'upstream_response_time=$upstream_response_time '
                       'upstream_cache_status=$upstream_cache_status';
access_log /var/log/nginx/access.log main_detailed buffer=64k flush=5s;
# 静态资源与健康检查不记录
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { access_log off; expires 30d; }
location /health-check { access_log off; return 200 "healthy\n"; }
# Top 10 最慢请求(按 request_time 降序)
awk '{print $NF, $(NF-1), $0}' access.log | sort -nr | head -10

# 按 URI 统计平均/最大耗时(假设 request_time 在最后一列)
awk '{split($7,a,"?"); uri=a[1]; sum[uri]+=$NF; cnt[uri]++; max[uri]=$NF>max[uri]?$NF:max[uri]} 
     END {for(u in sum) printf "%s avg=%.3f max=%.3f\n", u, sum[u]/cnt[u], max[u]}' access.log

# 状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -nr

# 缓存命中率
awk '{print $10}' access.log | tr -d '"' | sort | uniq -c | awk '
  /HIT/{h+=$1} /MISS/{m+=$1} END {printf "HIT=%d MISS=%d HIT_RATE=%.2f%%\n", h, m, h*100/(h+m)}'

0
看了该问题的人还看了