调优 worker_connections 需同步调整系统文件描述符限制、Nginx 进程级上限(worker_rlimit_nofile)和内核网络队列参数,三者不匹配将导致“Too many open files”或静默丢连接。

调优 worker_connections 不是改一个配置值就完事,它必须和系统文件描述符限制、Nginx 进程级上限、内核网络队列三者对齐,否则会报 “Too many open files” 或静默丢连接。
打通系统级文件描述符限制
每个 TCP 连接至少占用 1 个文件描述符(fd),Linux 默认单进程最多打开 1024 个 fd,远低于高并发需求。
- 编辑 /etc/security/limits.conf,为 Nginx 运行用户(如
nginx或www-data)添加两行:
nginx soft nofile 65536
nginx hard nofile 65536
- 若使用 systemd 管理服务,还需创建 /etc/systemd/system/nginx.service.d/override.conf,写入:
[Service]
LimitNOFILE=65536
- 执行
systemctl daemon-reload && systemctl restart nginx - 验证是否生效:
cat /proc/$(pgrep nginx)/limits | grep "Max open files",输出的软硬限制值均应 ≥ 65536
声明 Nginx 进程级句柄上限
系统开了口子,Nginx 必须主动“申请”足够 fd,否则仍按默认保守值运行,worker_connections 再高也无效。
- 在 nginx.conf 的 main 块(
events块外、http块前)添加:
worker_rlimit_nofile 65536;
- 该值应 ≥
worker_processes × worker_connections,建议设为相同值或略高(如 1.2 倍),为日志、SSL 缓存、上游连接等留余量 - 注意:这不是 per-worker 限制,而是整个主进程能向系统申请的 fd 总上限
匹配业务类型设合理数值
数值不是越大越好。过高会吃内存、增上下文切换;过低则卡在连接入口。关键看连接生命周期与资源消耗特征:
-
高频短连接场景(如 H5 秒杀页、REST API 网关):连接建得快、断得快,复用率低
→ 推荐worker_connections 4096–16384,并设keepalive_timeout 5–15加速回收 -
长连接保活型(如 WebSocket、HTTP/2 上报、直播流):单连接持续时间长,fd 占用稳定但总量大
→ 推荐worker_connections 2048–8192,搭配keepalive_timeout 15–300控制空闲释放 -
HTTPS 反向代理:除 socket 外还需 SSL session cache、OCSP stapling、证书读取等额外 fd
→worker_connections建议不超过 ulimit 的 70%~80%,例如 ulimit=65536 时,设为 ≤ 52428
同步优化 events 块与内核参数
只改 worker_connections 就像拓宽车道却不修入口匝道——车根本上不来。
- 在
events { }块中必须显式启用:
use epoll;
multi_accept on;
accept_mutex on;
- 调整关键内核参数(写入 /etc/sysctl.conf 并执行
sysctl -p):
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 25000
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 1048576
- 其中
somaxconn应 ≥worker_connections ÷ worker_processes,避免连接在进入 Nginx 前就被内核丢弃


















