要让单台 Nginx 稳定支撑 10 万级并发,需协同调优 worker_processes、worker_connections、worker_rlimit_nofile、worker_cpu_affinity 及系统 ulimit、epoll、multi_accept、accept_mutex 等参数,并控制内存开销。

要让单台 Nginx 实现稳定 10 万级并发连接,worker_connections 不能孤立设置——它必须与 CPU、内存、系统限制和事件模型协同调优。核心不是堆数字,而是打通“进程→连接→文件描述符→内核I/O”整条链路。
worker 进程与连接数配置
这是并发能力的起点,直接决定理论连接上限:
- worker_processes auto;:自动识别 CPU 核心数(如 8 核即启 8 进程),比写死数字更适配 NUMA 架构
- worker_connections 65535;:单进程最大连接数,8 进程 × 65535 = 理论 52 万连接(实际按后端预留约半数,仍远超 10 万)
- worker_rlimit_nofile 65535;:显式声明每个 worker 进程可打开的最大文件描述符数,必须 ≥ worker_connections
- worker_cpu_affinity auto;:自动绑定各 worker 到独立 CPU 核心,减少跨核调度与缓存抖动
系统级文件描述符限制
Nginx 参数只是上层声明,底层依赖操作系统许可。缺这步,启动时就报 too many open files:
- 临时生效:
ulimit -SHn 65535 - 永久生效:在
/etc/security/limits.conf中添加两行* soft nofile 65535* hard nofile 65535 - 确保 systemd 服务也继承该限制:在
/etc/systemd/system/nginx.service的[Service]段加LimitNOFILE=65535
events 模块关键配套
仅设 worker_connections 不够,还需匹配高效 I/O 模型和连接接纳策略:
- use epoll;:Linux 必选,高并发下性能远超 select/poll
- multi_accept on;:允许单次事件循环批量接受多个新连接,降低延迟、提升吞吐
- accept_mutex off;(高负载时推荐):关闭连接争抢锁,避免 worker 空转等待,实测在 >5 万连接时提升约 8–12%
内存与连接开销控制
65535 不是拍脑袋定的——它需兼顾内存占用与实际承载力:
- 每个连接平均消耗约 328 字节内存(含 read/write event 结构),65535 连接 ≈ 21MB/进程,8 进程共约 170MB,对 16G 服务器完全友好
- 若服务器内存充足(≥32G),可进一步设为
worker_connections 100000,但需同步调高worker_rlimit_nofile和系统 limits 至 100000 - 避免盲目设过大:超过硬件承载后,反而因内存分配竞争或内核调度退化导致性能拐点


















