优化 worker_connections 需协同系统资源、nginx 机制与业务连接行为,关键在于 /proc/sys/fs/file-max、/etc/security/limits.conf 和 nginx.conf 中 worker_rlimit_nofile 三者最小值对齐,并按连接类型(短连/长连/https)合理设值,同步调优 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 运行用户(如www-data或nginx)添加两行:www-data soft nofile 65536www-data hard nofile 65536 - Nginx 进程级声明:在
nginx.conf主块(http外)添加:worker_rlimit_nofile 65536;
该值应 ≥worker_connections,推荐设为相同值或略高(如 1.2 倍),为日志、上游连接等留余量
按业务连接模型设合理值
不同连接模式对 fd 消耗差异显著,不能统一设成 65535:
- 高频短连接(如 H5 秒杀页、REST API):连接建立快、释放快,重点是吞吐密度。可设
4096–16384,并配合keepalive_timeout 5–15防止空闲连接堆积 - 长连接保活型(如 WebSocket、HTTP/2 上报、直播流):单连接复用时间长,fd 占用稳定但总量大。建议
2048–8192,并设keepalive_timeout 15–30控制空闲时长 - HTTPS 反向代理场景:除 socket 外还需 SSL session cache、OCSP stapling、证书文件等额外 fd。建议
worker_connections不超过单进程 ulimit 的 70%~80%
配套 events 参数必须协同生效
只改 worker_connections 效果有限,需同步调整事件模型与连接接收策略:
-
use epoll;:Linux 下必须显式指定,避免回退到有 1024 硬限的select/poll -
multi_accept on;:让一个 worker 在一次事件循环中尽可能多地 accept 新连接,缓解突发流量排队压力 -
accept_mutex on;(默认开启):防止多个 worker 同时争抢新连接导致“惊群”,与multi_accept协同工作 - 关闭未启用的日志写入,或启用缓冲写入:
access_log /path/log main buffer=64k flush=5s;,减少每个请求占用的 fd 和 I/O 阻塞
验证是否真正生效
配置 reload 成功 ≠ 实际生效,必须实测验证:
- 查已运行 worker 进程的实际限制:
cat /proc/$(pgrep nginx)/limits | grep "Max open files" - 压测时观察:
lsof -p $(pgrep nginx) | wc -l(实际 fd 占用)与ss -s(连接状态分布) - 监控
Active connections是否长期逼近配置上限却无法提升吞吐——若持续 >85%,说明已到瓶颈,需检查是否被后端响应慢、keepalive 堆积或缓冲区阻塞拖累











