要让nginx单机稳定承载10万级并发,需协同调整worker_processes、worker_connections与worker_rlimit_nofile,并配置系统ulimit和内核参数;总连接数=worker_processes×worker_connections,如8核配12500可得10万,但须确保ulimit -n≥131072且worker_connections≤worker_rlimit_nofile。

要让 Nginx 单机稳定承载 10 万级并发连接,worker_connections 是核心参数之一,但它不能单独调大——必须和系统限制、Nginx 全局配置、内核参数协同调整,否则会直接报错或触发资源耗尽。
worker_connections 的真实含义与取值逻辑
它表示每个 worker 进程最多能同时处理的客户端连接数,不是总连接数。总并发能力 = worker_processes × worker_connections。
例如:8 核服务器设 worker_processes 8,若 worker_connections 12500,理论最大连接数就是 10 万。
但这个数字受两个硬约束:
- 操作系统级文件描述符上限(ulimit -n):每个 TCP 连接占用至少 1 个 fd,Nginx 还需打开日志、配置文件、缓存等,建议 ulimit -n ≥ 131072
- 内存开销:每个连接约占用 328 字节(含事件结构体),10 万连接约需 31MB 内存,仅是连接结构本身,不包括缓冲区、SSL 上下文等
关键配置项必须同步修改
只改 worker_connections 没用,以下三项必须成套设置:
-
worker_processes auto;或明确设为 CPU 核心数(如8) -
worker_rlimit_nofile 131072;—— 让 worker 进程能主动申请足够 fd,覆盖系统默认限制 - 在
events { }块中设worker_connections 12500;(8 核时)或65535;(单核/双核测试环境)
注意:worker_connections 值不能超过 worker_rlimit_nofile,否则启动失败。
配套的系统与内核准备
Nginx 配置只是上层,底层必须跟上:
- 在
/etc/security/limits.conf中添加:* soft nofile 131072<br> * hard nofile 131072
- 在
/etc/sysctl.conf中追加:fs.file-max = 2097152<br> net.core.somaxconn = 65535<br> net.ipv4.tcp_max_syn_backlog = 65535
- 执行
sysctl -p和ulimit -n 131072生效(建议写入 systemd service 文件或 shell profile)
验证是否真正生效
改完配置后别急着压测,先确认基础就位:
- 重启 Nginx 后运行
ps -eo pid,fdcount,comm | grep nginx,检查 worker 进程的 fdcount 是否接近设定值 - 访问
http://localhost/status(需启用 stub_status)观察Active connections实时值及Waiting是否长期堆积 - 用
ab -n 100000 -c 20000 http://localhost/简单压测,配合ss -s查看 ESTAB 连接数是否突破 10 万
如果连接数卡在 1024 或 65535,一定是 ulimit 或 worker_rlimit_nofile 没生效;如果出现 “too many open files”,说明 fd 资源已耗尽。










