要真正提升nginx最大连接数,必须同步调整系统文件描述符上限、worker_rlimit_nofile、worker_connections、events参数及cpu核数匹配,否则将触发“too many open files”或静默拒绝连接。

要真正提升 Nginx 的最大连接数,worker_connections 不能单独调大——它必须和系统限制、Nginx 进程声明、CPU 资源、业务模型四者对齐,否则只会触发 “too many open files” 或连接被静默拒绝。
确认并突破系统文件描述符上限
Linux 默认每个进程最多打开 1024 个文件(fd),而每个 TCP 连接至少占用 1 个 fd。如果 worker_connections 8192,但 ulimit -n 还是 1024,那实际能用的只有 1024。
- 临时生效:启动 Nginx 前执行
ulimit -n 65536(需 root 或对应权限) - 永久生效:编辑
/etc/security/limits.conf,添加两行(把nginx换成实际运行用户,如www-data):nginx soft nofile 65536nginx hard nofile 65536 - 验证是否生效:
cat /proc/$(pgrep nginx)/limits | grep "Max open files"
同步设置 Nginx 进程级文件描述符上限
仅改系统 limits 不够。Nginx 主配置中必须显式声明它能申请的 fd 上限,否则即使系统允许,Nginx 也会自我限制。
- 在
events块之外添加:worker_rlimit_nofile 65536; - 该值应 ≥
worker_connections,推荐设为相同值或略高(如 1.2 倍),为日志、上游连接等留余量 - 注意:
worker_connections不能超过worker_rlimit_nofile,否则 Nginx 启动时会静默降级
按业务类型设合理值,不是越大越好
每个连接约占 240–328 字节内存(不含缓冲区),1 万连接仅需约 2.5–3 MB 内存。瓶颈通常不在内存,而在上下文切换开销与系统资源匹配度。
- 静态资源或短连接 API(如 H5 秒杀页):可设
4096–16384 - WebSocket、HTTP/2 或直播流(HTTP-FLV)长连接:建议
2048–8192,并配keepalive_timeout 15–30 - 反向代理且后端响应慢:连接会在 Nginx 中等待,此时更需优化
proxy_read_timeout和重试策略,而非盲目提高worker_connections
配套 events 参数必须协同调整
只改 worker_connections 效果有限。事件模型和连接接收机制必须匹配:
-
use epoll;:Linux 必须显式指定,避免回退到有 1024 硬限的 select/poll -
multi_accept on;:让单个 worker 在一次事件循环中尽可能多地接受新连接,减少唤醒次数 - 确保
worker_processes与 CPU 核心数对齐(如 4 核设4,8 核常用auto) - 真实并发上限 =
worker_processes × worker_connections,这个乘积必须 ≤ 系统ulimit -n,并预留 20%~30% 余量(用于日志、SSL 缓存、临时文件等)











