Nginx高频请求优化需收紧连接生命周期、提升文件描述符上限、强化事件模型、协同内核TCP参数调优:禁用keepalive、启用reset_timedout_connection、调大nofile限制、配置multi_accept与accept_mutex、开启tcp_tw_reuse等。

应对极高频请求时,Nginx 连接释放慢会直接导致文件描述符耗尽、TIME_WAIT 积压、worker 进程卡槽、响应延迟飙升。优化目标不是“零延迟关闭”,而是让连接在业务合理边界内快速、确定、干净地退出生命周期,避免资源滞留和状态堆积。
收紧前端连接生命周期
高频短请求场景下,HTTP Keepalive 不仅无益,反而成负担——空闲连接长期占着 worker_connections 槽位,阻塞新连接接入。
- 强制禁用长连接:keepalive_timeout 0;(写在 http 或 server 块),响应后立即断连
- 启用主动清理:reset_timedout_connection on;,对握手失败、读写超时的连接直接发 RST,不等内核超时
- 无需配置 keepalive_requests:timeout=0 时该指令失效,保留易引发误解
匹配系统资源上限
高频建连/断连下,文件描述符(fd)比内存更早成为瓶颈。单个 worker 打开 fd 数受限于 ulimit,超限即报 too many open files,连接被静默丢弃。
- 检查当前限制:cat /proc/$(pgrep nginx)/limits | grep "Max open files"
- 永久放宽系统限制:在 /etc/security/limits.conf 中添加
nginx soft nofile 1048576
nginx hard nofile 1048576 - 同步 Nginx 配置:worker_rlimit_nofile 1048576;(写在 events 外层)
加速事件处理与连接回收
默认 epoll 虽高效,但未显式调优时仍存在 syscall 次数多、accept 串行、软中断集中等问题,加剧 CPU 抖动和延迟。
- 显式启用并强化事件模型:
events {
use epoll;
multi_accept on;
accept_mutex off;
}
其中 multi_accept on 支持单次 epoll_wait 后批量 accept 多个连接;accept_mutex off(内核 ≥ 3.9 且压测验证后)可减少 worker 争抢,提升吞吐 - 分散网卡软中断:用 watch -n 1 'cat /proc/softirqs | grep NET_RX' 查倾斜;通过 RPS(echo 0f > /sys/class/net/eth0/queues/rx-0/rps_cpus)或升级多队列网卡 + RSS 分散负载
协同内核参数控制 TCP 状态回收
Nginx 不管理 TCP 状态机,TIME_WAIT、FIN_WAIT2 等由内核处理。若不调优,端口快速耗尽,新连接 SYN 被丢弃。
- 允许复用 TIME_WAIT 套接字:net.ipv4.tcp_tw_reuse = 1(对 Nginx 作反向代理特别关键)
- 缩短被动关闭等待时间:net.ipv4.tcp_fin_timeout = 30
- 扩大全连接队列:net.core.somaxconn = 65535,防 SYN 包丢失
- 提升网络栈缓冲:net.core.rmem_max = 16777216,net.core.wmem_max = 16777216











