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

worker_processes auto; # 推荐写法,自动等于 CPU 核数 # 或者明确写:worker_processes 8; # 假设服务器有 8 核
Nginx 是多进程 + 事件驱动模型,每个 worker 进程是独立的,能充分利用多核 CPU。
worker_processes = CPU 核数(或核数 × 1.5~2),能最大化 CPU 利用率。
设太少(如默认 1):CPU 利用率低,并发上不去。
设太多(如 32 核机器设 100):进程上下文切换开销暴增,反而性能下降。
一般建议:是设置为与 CPU 核心数相同,以充分利用多核并行处理能力。
但实际生产中需要结合负载性质:I/O 密集型(大量静态文件、上游慢响应)可适当增大进程数以覆盖阻塞时间。
CPU 密集型(复杂加密、压缩)则更应与核心数对齐或略小。
worker_connections + 多路复用模型:单进程能抗多少连接

events {
worker_connections 65535; # 单个 worker 最大连接数
multi_accept on; # 一次性接受多个连接
use epoll; # Linux 推荐(性能最好)
# use kqueue; # FreeBSD / macOS
}
其次,worker_connections 定义每个 worker 能同时处理的连接上限。
Nginx 使用事件驱动模型,单个进程通过高效的异步 I/O 管理大量连接,因此提升 worker_connections 可以线性扩大并发容量。
但该值受限于操作系统的文件描述符(FD)上限:总并发近似等于 worker_processes × worker_connections(减去一些内部连接)。
因此,必须同步调整 ulimit 与系统级 fd_limit,避免达到系统极限而导致拒绝新连接。
理论最大值:单个 worker_connections ≈ ulimit -n(系统最大打开文件数) / worker_processes
系统资源限制(ulimit + 内核参数)

# 增大文件描述符上限 fs.file-max = 2097152 # 增大 TCP 连接 backlog net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 8192 # 复用 TIME_WAIT 端口 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 # 增大连接数 net.ipv4.ip_local_port_range = 1024 65535 # 关闭 TCP slow start 重传优化 net.ipv4.tcp_slow_start_after_idle = 0
除了通过 ulimit 提升单进程 FD 上限外,需修改 /etc/security/limits.conf等参数。
并关注 TCP TIME_WAIT、keepalive_timeout 设置以控制连接生命周期,避免大量短连接耗尽 FD。
内存与网络 I/O优化

处理海量静态资源或代理大流量时,系统的上下文切换次数决定了吞吐量。
Sendfile & TCP_NOPUSH:开启 sendfile 启用零拷贝技术。
# 开启 sendfile + tcp_nopush(零拷贝 + 优化网络包) sendfile on; tcp_nopush on;
数据直接在内核空间缓冲区传输,不经过用户空间。