要让nginx稳定支撑十万级并发并保持毫秒级响应,必须从系统内核、进程模型、事件处理、连接管理、传输效率五层协同优化:调高fs.file-max与nofile限制、启用epoll及multi_accept、设置worker_connections≥102400、开启sendfile和gzip_static、配置upstream keepalive与快速超时机制。

要让 Nginx 稳定支撑十万级并发并保持毫秒级响应,不能只调 nginx.conf,必须从系统内核、进程模型、事件处理、连接管理、传输效率五个层面协同优化。单点调优效果有限,关键在整体资源链路不卡顿。
系统级资源准备:先打通操作系统瓶颈
很多团队配完 nginx.conf 发现压测卡在 2 万连接就上不去,问题往往出在系统默认限制上。以下参数需写入 /etc/sysctl.conf 并执行 sysctl -p 生效:
- 文件描述符上限:fs.file-max = 2097152(全局最大值),fs.nr_open = 2097152(单进程可设上限)
- TCP 连接队列:net.core.somaxconn = 65535(监听队列长度),net.core.netdev_max_backlog = 65535(网卡接收队列)
- SYS/ACK 与 TIME_WAIT 控制:net.ipv4.tcp_max_syn_backlog = 65535,net.ipv4.tcp_tw_reuse = 1(允许 TIME_WAIT 套接字重用于新连接)
同时修改 /etc/security/limits.conf,确保 Nginx 启动用户能突破限制:
- * soft nofile 1048576
- * hard nofile 1048576
- root soft nofile 1048576
- root hard nofile 1048576
Nginx 主进程与工作模型:匹配硬件不浪费
worker 进程不是越多越好,而是要与 CPU 物理核心数对齐,并避免跨 NUMA 节点调度:
- worker_processes auto:自动识别逻辑 CPU 数(推荐,比硬写数字更健壮)
- worker_cpu_affinity auto:Nginx 1.12+ 支持,自动绑定 worker 到独立核心,减少上下文切换
- worker_rlimit_nofile 1048576:每个 worker 最大打开文件数,必须 ≥ worker_connections × 安全冗余系数(建议 1.2 倍)
注意:若使用容器部署,需确认宿主机 ulimit 和容器 --ulimit 参数已同步设置,否则该值会被截断。
事件与连接层:用对 epoll 才算真正高并发
Linux 下必须启用 epoll,且配置需兼顾吞吐与延迟:
- use epoll:显式声明,避免自动探测失败
- worker_connections 102400:单 worker 并发连接上限(8 核机器配 10 万总连接,即 8 × 102400 = 819200 理论上限)
- multi_accept on:允许单次事件循环接受多个新连接,降低 accept 延迟
- accept_mutex on:多 worker 竞争监听 socket 时启用互斥锁,防止“惊群”(新版默认开启,但显式写出更清晰)
keepalive_timeout 不宜过长(建议 15–30s),否则空闲连接长期占用 worker_connections,实际可用连接数大幅缩水。
传输与缓存加速:减少 CPU 和网络开销
毫秒级响应的关键之一是减少数据拷贝和压缩耗时:
- sendfile on:启用内核零拷贝,静态资源(如图片、JS、CSS)直送网卡
- tcp_nopush on:配合 sendfile,将响应头与首个数据块合并发送,减少 TCP 包数量
- open_file_cache max=100000 inactive=30s:缓存频繁访问的文件句柄,避免反复 open/close 系统调用
- gzip_static on:提前用 gzip 压缩好静态文件(如 .js.gz),Nginx 直接返回,省去运行时压缩 CPU 开销
反向代理场景下,务必配置 proxy_buffering off(流式响应)或合理调大 proxy_buffers,避免后端慢响应阻塞整个连接。
反向代理与健康路由:保障下游稳定才撑得起上游并发
网关型部署中,上游并发能力受限于后端服务水位。关键配置包括:
- upstream keepalive 32:复用到后端的长连接,减少 TCP 握手开销
- proxy_connect_timeout 3s、proxy_read_timeout 5s:快速失败,避免 worker 被挂起
- proxy_next_upstream error timeout http_502 http_503 http_504:自动故障转移,提升可用性
- 搭配 health_check interval=3 fails=2 passes=2(需 stream 模块或 Plus 版本),或用开源方案如 nginx-upstream-check-module
若后端是 gRPC 或 WebSocket,还需启用 http2、stream 模块并单独调优帧大小与超时。











