直接看 keepalive connections reuse 日志行出现频率即可判断复用是否真正生效,它是在开启 debug 日志、配齐 upstream keepalive、proxy_http_version 1.1 和 proxy_set_header connection '' 后,nginx 内核级连接复用的原始记录,高频连续出现或极少夹杂 create 行表明复用活跃有效。

直接看 keepalive connections reuse 日志行出现频率,就能判断复用是否真正生效——它不是间接指标,而是 Nginx 内核级连接复用行为的原始记录。
定位日志来源与启用条件
该指纹只在开启 debug 日志后才输出,需先配置:
-
error_log /var/log/nginx/error.log debug;(注意:仅临时开启,生产环境慎用) - 确保 upstream 已配
keepalive N;,且 location 中有proxy_http_version 1.1;和proxy_set_header Connection ''; - 重启 Nginx 后触发真实流量(curl 或压测),再 grep 日志:
grep "keepalive connections reuse" /var/log/nginx/error.log
解读日志行含义与有效样本
典型输出格式为:keepalive connections reuse: 12345#67890,其中数字是连接句柄标识。关键看两类模式:
- 高频连续出现:同一秒内出现数十次 reuse 行,说明空闲连接被持续命中,复用活跃
-
零星夹杂 create 行:若同时看到
create connection:,但比例极低(如 100 次 reuse 对应 1 次 create),说明池子稳定、新建极少 - 长时间无 reuse 行:哪怕有 keepalive 配置,但日志里只有 create 或干脆没这两类关键词,说明复用未触发(常见于未清 Connection 头或协议版本不对)
结合其他指标交叉验证
单看日志不够,必须搭配运行时数据确认效果:
- 执行
ss -t -o src :8080 | wc -l(假设后端端口 8080),观察 ESTABLISHED 连接数是否稳定在worker_processes × keepalive 值附近,而非随 QPS 线性上涨 - 用
nginx -T | grep -A5 upstream核对实际生效的 keepalive 数值,避免配置被覆盖 - 对比开启前后回源 P95 延迟:若下降 20ms 以上,且
keepalive connections reuse日志量同步上升,基本可确认调优落地
警惕“假复用”干扰项
有些情况看似复用,实则无效:
- 日志中 reuse 行很多,但
ss显示连接数仍飙升 → 可能是多个 worker 各自建池,而总连接数超限,需检查worker_connections是否足够 - reuse 行集中出现在某几个秒级时间戳,其余时段空白 → 说明流量不均,部分 worker 空闲、部分过载,应配合
least_conn负载均衡策略 - reuse 行存在,但后端
netstat -ant | grep :8080 | grep TIME_WAIT持续增长 → 问题在后端主动断连,需检查其 keepalive_timeout 是否大于 Nginx 设置值











