调整连接清理频率并非直接提升短连接性能的手段,真正有效的是控制连接生命周期、减少无效驻留、加速资源回收;需收紧keepalive_timeout、启用reset_timedout_connection、匹配fd上限、优化事件模型及内核tcp参数。

调整连接清理频率本身不是提升短连接性能的直接手段,Nginx 并不提供“每秒清理几次”这类可调参数。真正起作用的是**控制连接生命周期、减少无效驻留、加速资源回收**——让空闲连接更快释放、避免槽位被卡死,从而腾出空间承接新请求。
收紧前端连接生命周期
高频短连接场景下,保持长连接反而有害。默认 keepalive_timeout 60s 会让已关闭的连接继续占着 worker_connections 槽位长达一分钟,造成资源浪费和排队延迟:
- 在 http 或 server 块中设 keepalive_timeout 0;,强制响应后立即断连
- 添加 reset_timedout_connection on;,对超时未完成握手或读写的连接主动发 RST,避免 linger 在 FIN_WAIT2 状态
- 无需配置 keepalive_requests,因为 timeout=0 时该指令自动失效
匹配系统级资源上限
连接清理慢的表象,常源于文件描述符(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;
优化事件模型与接收行为
减少系统调用频次,让连接进来得更快、走得更干净:
- 在 events{} 块中显式声明:use epoll;(虽默认,但防误配)
- 启用批量接收:multi_accept on;,使一次 epoll_wait 后可 accept 多个新连接
- 设置合理并发规模:worker_processes auto;,worker_connections 8192;(8K–16K 在多数 8–32 核机器上更稳,盲目拉高反致调度抖动)
配合内核加速状态流转
Nginx 不管 TCP 状态机,但连接能否快速释放,高度依赖内核处理 TIME_WAIT 和 FIN_WAIT2 的效率:
- net.ipv4.tcp_tw_reuse = 1:允许 TIME_WAIT socket 复用于新的 outbound 连接(反向代理场景效果显著)
- net.ipv4.tcp_fin_timeout = 30:缩短 FIN_WAIT2 超时,加快被动关闭连接释放
- net.core.somaxconn = 65535 和 net.core.netdev_max_backlog = 5000:防止 SYN 队列溢出丢包,保障新连接顺利进入流程











