在 Nginx 中排查“慢请求”,一般从 日志配置 + 日志分析 + 定位方向 三步来做。下面按实战方式说。
log_format 是否包含耗时字段Nginx 默认日志 不包含耗时,需要手动加。
常见慢请求相关变量:
$request_time:客户端整个请求耗时(含网络)$upstream_response_time:后端(PHP/Java 等)处理耗时$upstream_connect_time:连接后端耗时$upstream_header_time:后端返回 header 耗时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
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
awk '$NF > 1 {print}' /var/log/nginx/access.log
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
request_time 大,但 upstream_response_time 小✅ 问题在 Nginx 或网络
upstream_response_time 很大✅ 问题在后端
tail -f /var/log/nginx/access.log | awk '$NF > 1'
ngxtop(推荐)pip install ngxtop
ngxtop -l /var/log/nginx/access.log
如果你愿意,可以把:
log_format发出来,我可以直接帮你写一套「慢请求排查方案」。