worker_connections必须与系统文件描述符限制、Nginx进程级声明(worker_rlimit_nofile)及内核参数(somaxconn等)三者对齐,缺一不可;仅调高该值会导致“Too many open files”错误,需按业务类型(短连/长连/HTTPS)合理设值,并同步配置epoll、multi_accept等events参数。

worker_connections 不是调大就完事,它得和系统资源、Nginx 运行机制、业务连接特征三者咬合才真正生效。设高了但系统限制没跟上,会直接报 too many open files;设低了又卡住并发,连接被静默拒绝。
对齐三层文件描述符限制
真实生效值取决于以下三者的最小值,缺一不可:
- 系统总上限:
/proc/sys/fs/file-max,建议设为worker_processes × worker_connections × 1.3~1.5,预留 TIME_WAIT、SSL 缓存、日志等开销 - 用户级限制:在
/etc/security/limits.conf中为 Nginx 运行用户(如nginx或www-data)添加:nginx soft nofile 65536nginx hard nofile 65536
改完需重新登录或重载 systemd 配置 - Nginx 进程级声明:在
nginx.conf主块(http外)添加:worker_rlimit_nofile 65536;
该值应 ≥worker_connections,推荐设为相同值或略高(如 1.2 倍)
按业务类型设定合理数值
不同连接模式对 fd 和内存消耗差异明显,不能统一设 65535:
- 高频短连接(如 H5 秒杀页、CDN 静态资源):设 4096–16384,重点配合
tcp_tw_reuse = 1和扩大ip_local_port_range - 长连接保活型(如 WebSocket、HTTP/2 上报通道、MQTT):设 2048–8192,并配
keepalive_timeout 15–30控制空闲时长 - HTTPS 反向代理场景:除 socket 外还需 SSL session cache、OCSP stapling 等额外 fd,建议
worker_connections不超过单进程 ulimit 的 80%
配套 events 参数必须协同生效
只改 worker_connections 效果有限,需同步调整事件模型与连接接收策略:
-
use epoll;:Linux 下必须显式指定,避免回退到有 1024 硬限的select/poll -
multi_accept on;:让一个 worker 在一次事件循环中尽可能多地 accept 新连接,缓解突发流量排队 -
accept_mutex on;:默认开启,防止多个 worker 同时争抢新连接导致“惊群” - 关闭未启用的日志写入,或启用
buffer+flush,减少每个请求占用的 fd
验证是否真正生效
配置 reload 成功不等于生效,要实测确认:
- 查已运行 worker 进程的实际限制:
cat /proc/$(pgrep nginx)/limits | grep "Max open files" - 压测时观察 fd 实际占用:
lsof -p $(pgrep nginx) | wc -lss -s查看连接状态分布 - 监控 fd 使用率是否持续 >85%,是否出现大量
TIME_WAIT或连接堆积


















