高频短连接优化核心是轻量化连接生命周期、高效复用资源、紧密协同内核:禁用keepalive、设keepalive_timeout 0、启用reset_timedout_connection;调高文件描述符限制;显式use epoll并开启multi_accept;合理设置worker_processes与worker_connections。

高频短请求本身不耗时,但频繁建连、断连、上下文切换、软中断堆积会快速拖垮 Nginx 吞吐和 CPU 效率。核心不是“扛更多请求”,而是让每次连接更轻、回收更快、调度更均、系统协同更紧。
收紧连接生命周期,避免资源卡在空槽里
默认 keepalive_timeout=60s 会让已关闭的连接继续占着 worker_connections 槽位,短连接场景下这纯属浪费:
-
强制禁用 HTTP Keepalive:在 http 或 server 块中设
keepalive_timeout 0;,响应后立即断连 -
启用连接重置机制:添加
reset_timedout_connection on;,快速清理握手失败或读写超时的“僵尸连接” - 无需配置 keepalive_requests:因 timeout=0,该指令自动失效,留着反而易引发误解
匹配系统上限,释放真实并发能力
worker_connections 再大,也受限于单进程文件描述符(fd)上限。高频短连接下 fd 耗尽比内存更早发生:
-
检查当前限制:运行
cat /proc/$(pgrep nginx)/limits | grep "Max open files" -
永久放宽系统限制:在
/etc/security/limits.conf中添加
nginx soft nofile 65536
nginx hard nofile 65536 -
同步 Nginx 配置:在 events 外层写
worker_rlimit_nofile 65536;
优化事件模型与接收行为,减少系统调用抖动
epoll 是基础,但需配合两个关键动作才能应对短连接洪峰:
-
显式声明事件驱动:在
events{}块中写use epoll;(虽默认,但防误配) -
开启批量接受连接:添加
multi_accept on;,让一次 epoll_wait 后可 accept 多个新连接,大幅降低 syscall 次数 -
控制 worker 并发规模:设
worker_processes auto;,worker_connections 8192;或16384;不建议盲目拉到 65535,实测 8K–16K 在多数 8–32 核机器上更稳
分散网卡软中断,解决 CPU 单核打满
CPU 中断频率过高,往往不是 Nginx 写得差,而是 NET_RX 软中断全压在单核上:
-
确认瓶颈:用
watch -n 1 'cat /proc/softirqs | grep NET_RX'查各 CPU 的接收计数是否严重倾斜 -
启用 RPS(软件分发):如 CPU 0–3 可用,执行
echo 0f > /sys/class/net/eth0/queues/rx-0/rps_cpus,并写入启动脚本持久化 -
升级多队列网卡 + RSS:用
ethtool -L eth0 combined 4开启 4 队列,使中断天然分散到多个 CPU -
配合长连接降频建连:若上游支持,在 upstream 块中启用
keepalive 32;、proxy_http_version 1.1;、proxy_set_header Connection '';,从源头减少新建连接压力



















