worker_connections 必须与 worker_processes、系统文件描述符限制(ulimit、worker_rlimit_nofile)、事件模型(epoll/multi_accept)及内核参数协同配置,否则无法释放并发性能;例如8核服务器设 worker_processes auto 与 worker_connections 10240,理论并发81920,需同步调高 ulimit 和 sysctl 参数并启用 epoll 才能稳定承载约7万连接。

直接提升 Nginx 高并发能力,连接数配置是核心抓手——但不能只改 worker_connections 这一个值,必须和进程数、系统限制、事件模型协同调整,否则容易卡在瓶颈上。
worker_processes 与 worker_connections 要配平
两者乘积决定理论最大并发连接数。比如 8 核服务器:
-
worker_processes auto;自动识别为 8,比硬写数字更稳妥 -
worker_connections 10240;是较优平衡点(不是盲目拉到 65535) - 理论并发 = 8 × 10240 = 81920,实际能稳定承载约 7 万左右 ESTABLISHED 连接
必须同步放开系统级文件描述符限制
Nginx 每个连接至少占用 1 个文件描述符,若系统默认 ulimit 是 1024,哪怕配置了 10240 连接也起不来:
- 运行
ulimit -n 65535临时生效;永久生效需修改/etc/security/limits.conf - 在 nginx.conf 顶层加
worker_rlimit_nofile 65535;,让 Nginx 主动申请足够资源 - 验证:启动后执行
cat /proc/$(pidof nginx)/limits | grep "Max open files"
启用 epoll + multi_accept 提高连接吞吐密度
Linux 下默认 select/poll 效率低,尤其连接数过万时 CPU 升高明显:
-
events { use epoll; multi_accept on; }是标配 -
multi_accept on让 worker 一次从内核队列中收多个新连接,减少唤醒次数 - 搭配内核参数
net.core.somaxconn = 65535,避免 listen 队列溢出丢包
keepalive 控制连接生命周期,防资源空占
长连接省握手,但不设限会拖垮内存和端口:
-
keepalive_timeout 65;对 API 类服务较合理(60–75 秒区间) -
keepalive_requests 1000;单连接最多处理 1000 次请求,强制释放防止泄漏 - 配套调内核:
net.ipv4.tcp_tw_reuse = 1,缓解短连接 TIME_WAIT 端口耗尽











