Nginx是大型架构核心,下面详解Nginx并发性能@mikechen
worker_processes:并发的上限天花板
worker_processes:这是 Nginx 并发处理的基石。

Nginx 采用异步非阻塞模式,理论上一个进程可以处理无数个连接。
但为了减少上下文切换(Context Switch)的损耗,最佳实践是将 Worker 进程数、与服务器的 CPU 物理核心数绑定。
# 自动匹配 CPU 核心数 worker_processes auto; # 可选:绑定 CPU 亲和性,防止进程在不同核心间跳动(进一步压榨性能) worker_cpu_affinity auto;
worker_connections:每个 Worker 能处理多少连接
如果说 worker_processes 决定了有多少个“工头”,那么 worker_connections 就决定了每个“工头”能同时应付多少个“客户”。
核心逻辑: 默认值通常只有 1024。
这在高并发场景下是极大的浪费,这个值的大小直接决定了 Nginx 的最大并发承载量。
events {
use epoll; # Linux 必选的高性能 IO 模型
worker_connections 65535; # 榨干单进程能力
}

必须,同步配合操作系统的文件描述符限制(worker_rlimit_nofile),否则此参数调大也无效。
keepalive_timeout:提高并发的关键优化项
开启 Keep-Alive 后,客户端和服务端在传输完数据后不会立即切断 TCP 连接。
后续请求可以复用该连接,这能显著降低 CPU 消耗、并降低延迟。

http {
keepalive_timeout 65;
keepalive_requests 10000; # 一个长连接最多跑 1w 个请求
}
太短: 频繁握手,CPU 飙升;
太长: 空闲连接长期占用内存,导致新连接进不来;
建议: 设置为 65s 左右,并配合 keepalive_requests 限制单连接最大请求数。
高性能 IO 三件套
这是 Nginx 网络传输效率的核心,它们三者配合,构成了数据传输的“黄金组合”。

① sendfile on; (零拷贝技术)
传统文件传输需要将数据从 磁盘 -> 内核缓冲区 -> 用户缓冲区 -> 内核 Socket 缓冲区 -> 网卡,发生了多次上下文切换和内存拷贝。
开启后: 数据直接从 磁盘 -> 内核缓冲区 -> 网卡。
Nginx 进程不再参与数据搬运,极大降低 CPU 负载。
② tcp_nopush on; (攒够了再发)
作用: 必须在开启 sendfile 时才能使用。
它基于 FreeBSD 的 TCP_CORK 思想(Linux 下对应类似机制)。
逻辑: 它会把 HTTP 响应头和正文中的小包“攒”在一起,等填满一个 TCP 数据包(MSS)后再发送。这减少了网络报文数量,提升了吞吐量。
③ tcp_nodelay on; (别等,立刻发)
作用: 禁用了 Nagle 算法。
逻辑: 乍一看它与 tcp_nopush 矛盾,但在 Nginx 中它们是完美的互补。
sendfile + tcp_nopush 负责高效传输大文件数据。
