worker_connections必须与系统资源、业务连接模式及系统限制严格匹配,否则设低会扛不住流量,设高则触发“too many open files”或内存耗尽;短连接建议4096~32768,长连接建议32768~65535,https场景不超过ulimit的70%~80%,并需同步调高ulimit、worker_rlimit_nofile和net.core.somaxconn等参数。

worker_connections 不是随便填个大数字就行的参数,它必须和服务器实际资源、业务连接模式、系统限制严格匹配。设低了扛不住流量,设高了反而触发 “Too many open files” 错误或内存耗尽。
按业务类型选值范围
不同业务对连接生命周期和资源占用差异很大,不能统一套用一个数值:
- 短连接密集型(如 API 网关、CDN 回源):连接建立快、关闭快,fd 消耗高频且波动大。建议从 4096~8192 起步,压测后逐步调到 16384~32768;
-
长连接保活型(如 WebSocket、HTTP/2 上报、MQTT 接入):单连接复用时间长,fd 占用稳定但总量大。建议直接设为 32768~65535,重点保障
worker_rlimit_nofile和系统fs.file-max充足; -
HTTPS 代理场景:除 socket 外还需 SSL session cache、OCSP stapling、证书文件等额外 fd 开销。建议
worker_connections不超过单 worker 进程 ulimit 的 70%~80%,例如 ulimit -n 是 65536,就设 40960 或更低。
必须同步调整的系统与 Nginx 配置
只改 worker_connections 几乎没用——它只是“上限标尺”,真正能撑住多少连接,取决于三层是否打通:
- 系统级文件描述符限制:
ulimit -n必须 ≥worker_connections × worker_processes,推荐设为 65536 或更高; - Nginx 进程级声明:
worker_rlimit_nofile应 ≥worker_connections × worker_processes,建议略高 10%~20%,例如设worker_rlimit_nofile 72000;; - 内核网络队列:
net.core.somaxconn(已完成连接队列)建议设为 65535,net.ipv4.tcp_max_syn_backlog(半连接队列)同步调高,避免 SYN 包被丢弃。
配套 events 块关键优化
光有连接容量还不够,得让 Nginx 接得快、分得匀、复用好:
-
use epoll;:Linux 下必须显式写,否则可能回退到 select/poll,有 1024 硬限制; -
multi_accept on;:让一个 worker 在一次事件循环中尽可能多地 accept 新连接,缓解突发流量排队; -
accept_mutex off;:高并发多 worker 场景下减少锁争抢(尤其搭配reuseport时效果更明显); -
keepalive_timeout要配合业务:短连接服务可设 15–30s,长连接服务可设 60–300s,避免 fd 长期空占。
验证是否真正生效
改完别急着上线,先确认每层限制都已到位:
- 查当前 worker 进程实际限制:
cat /proc/$(pgrep nginx)/limits | grep "Max open files"; - 检查 Nginx 配置语法:
nginx -t; - 重启后观察错误日志,重点排查
accept() failed (24: Too many open files)或worker_connections are not enough; - 用
ss -s或netstat -an | grep :端口 | wc -l查实时连接数,对比理论上限是否接近。











