Nginx日志中的响应时间优化
一 明确指标与日志埋点
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'rt=$request_time uct=$upstream_connect_time urt=$upstream_response_time '
'cache=$upstream_cache_status';
access_log /var/log/nginx/access.log main_ext;
tail -n 1 /var/log/nginx/access.log | cut -d' ' -f12- # 观察是否包含 rt=、urt=、cache=
二 用日志快速定位慢请求
awk -F'rt=' '{print $2}' access.log | cut -d' ' -f1 | sort -nr | head -10
awk -F'"' '{print $2}' access.log | sort | uniq -c | sort -nr | head
awk '{print $NF}' access.log | sort | uniq -c
# 命中率 = HIT / (HIT + MISS)
awk '$6 > 100000 {print $7, $6}' access.log | sort -k2 -nr | head
cat access.log | docker run --rm -i diyan/goaccess \
--time-format='%H:%M:%S' --date-format='%d/%b/%Y' \
--log-format='%h %l %u %t "%r" %s %b "%R" "%u" rt=$request_time urt=$upstream_response_time cache=$upstream_cache_status' \
> report.html
三 配置层优化降低响应时间
proxy_http_version 1.1;
proxy_set_header Connection "";
upstream backend {
server 10.0.0.1:8080;
keepalive 32;
}
resolver 223.5.5.5 valid=30s; # 如用域名,配置解析器与缓存
proxy_buffering on;
proxy_buffers 16 16k;
proxy_busy_buffers_size 64k;
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
四 上游与应用层协同优化
五 监控与维护