在 Debian 上定位 Nginx 慢请求(slow request),通常可以从 Nginx 自身日志、系统层面、后端应用、网络 四个方向入手。下面给你一套实用、可操作的排查思路。
慢请求不一定在 Nginx:
request_time / upstream_response_time编辑站点配置(如 /etc/nginx/sites-enabled/default):
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status '
'rt=$request_time uct=$upstream_connect_time '
'uht=$upstream_header_time urt=$upstream_response_time';
access_log /var/log/nginx/access.log main;
重载 Nginx:
nginx -t
systemctl reload nginx
字段含义:
rt:总请求耗时(客户端视角)urt:后端处理耗时rt 大但 urt 小 → Nginx 或网络问题urt 大 → 后端慢awk '$NF > 2 {print}' /var/log/nginx/access.log
或按时间排序:
sort -k12 -n /var/log/nginx/access.log | tail
nginx -V 2>&1 | grep stub_status
若支持,开启:
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
访问:
curl http://127.0.0.1/nginx_status
关注:
Active connectionsReading / Writing / Waitingps -eo pid,ppid,cmd,%cpu,%mem,etime | grep nginx
如果有 worker 长时间不退出 → 可能阻塞。
top
iostat -x 1
vmstat 1
常见问题:
ss -tnp | grep nginx
关注:
ESTABLISHED 很多但无数据TIME_WAIT 过多php-fpm.conf
request_slowlog_timeout = 2s
slowlog = /var/log/php-fpm/slow.log
查看慢日志:
tail -f /var/log/php-fpm/slow.log
curl -w "%{time_total}\n" http://127.0.0.1:8080/api
curl -w "%{time_connect} %{time_starttransfer} %{time_total}\n" https://domain
Nginx 中避免使用外部域名做 proxy_pass,或加:
resolver 127.0.0.1 valid=10s;
request_timeproxy_buffering off 导致响应变慢gzip 但 CPU 不够request_time + upstream_response_timert > 1s 的请求rt 和 urt如果你愿意,可以把:
发出来,我可以帮你 精准定位是哪一层慢。