要支撑千万级并发,需协同调优worker_connections、fs.file-max、limits.conf和worker_rlimit_nofile;单设worker_connections无效,必须满足系统总上限≥用户级上限≥进程级上限,并兼顾内存与内核参数。

要让 Nginx 稳定支撑千万级并发,worker_connections 不能孤立设置,必须与系统级文件句柄上限 fs.file-max 协同调优。否则即使配置再高,也会在内核层被拦截,出现 accept() failed (24: Too many open files) 错误,新连接直接被丢弃。
worker_connections 是单进程连接上限
它定义每个 worker 进程最多能同时管理多少个 TCP 连接(含客户端连接、上游代理连接、keepalive 连接等)。实际理论并发数 = worker_processes × worker_connections。例如:
worker_processes 8;worker_connections 131072;- → 理论并发容量 = 8 × 131072 = 1 048 576(约 100 万)
若目标是千万级,并发容量需达 10× 以上,仅靠提升此值远远不够——它受限于操作系统对“打开文件数”的硬约束。
fs.file-max 是系统总句柄天花板
/proc/sys/fs/file-max 表示整个 Linux 系统可分配的最大文件描述符总数(含 socket、普通文件、管道等)。Nginx 所有 worker 进程加起来打开的连接数,不能超过该值。常见误区是只调高 worker_connections,却忽略系统默认值往往只有 8192~65536。
- 查看当前值:
cat /proc/sys/fs/file-max - 临时生效:
sysctl -w fs.file-max=2000000 - 永久生效:在
/etc/sysctl.conf中添加fs.file-max = 2000000,再执行sysctl -p
建议设为 worker_processes × worker_connections × 1.2~1.5,预留缓冲空间应对 TIME_WAIT 连接、日志文件、临时缓存等其他开销。
必须同步调整的三项关键限制
Nginx 要真正用上高连接数,以下三者必须匹配且满足大小关系:
-
系统级总上限:
fs.file-max ≥ 2000000(如支持千万并发,推荐 ≥ 500 万) -
用户级进程上限:通过
/etc/security/limits.conf设置 nginx 用户的nofile,例如:www-data soft nofile 1048576www-data hard nofile 1048576 -
Nginx 进程级声明:在
nginx.conf的主上下文添加:worker_rlimit_nofile 1048576;(该值必须 ≤ limits.conf 中的 hard nofile)
三者缺一,Nginx 启动时不会报错,但运行中会静默降级,实际并发远低于预期。
避免盲目堆高 worker_connections
每个连接平均消耗约 240 字节内存(含 socket buffer、connection struct 等),100 万连接 ≈ 240MB 内存;千万连接则需约 2.4GB 仅用于连接结构体。还需考虑:
- 每连接对应一个文件描述符,受
ulimit -n和fs.file-max双重制约 - 高连接数会放大内核网络栈压力(如 net.ipv4.ip_local_port_range、net.ipv4.tcp_tw_reuse 等需同步优化)
- 真实业务中,长连接、慢接口、上传场景更易耗尽连接数,比短连接 QPS 更值得关注
所以不是越大越好,而是在目标并发量、可用内存、系统资源间做平衡。例如:16 核服务器配 worker_processes auto + worker_connections 262144 + fs.file-max=5242880,即可支撑稳定千万级活跃连接。











