高并发下,Nginx如何提升10倍性能?

一、worker_processes —— CPU 利用率的上限

要实现性能的“10倍跨越”,核心逻辑是充分利用多核 CPU 资源、优化连接复用以及打破操作系统的限制。

Nginx 是单线程异步非阻塞模型,要跑满硬件性能,必须让 Nginx 的工作进程与 CPU 核心一一对应。

高并发下,Nginx如何提升10倍性能?

worker_processes: 建议设置为 auto。

worker_processes auto; worker_cpu_affinity auto; # 自动绑定 CPU 亲和性

这会让 Nginx ,自动检测 CPU 核心数并启动对应数量的工作进程。

 

二、worker_connections —— 并发连接能力的核心

单机千万级 QPS 的第一个瓶颈往往是文件句柄数。

在 Linux 中,每个连接都是一个文件。

worker_rlimit_nofile: 必须调大工作进程能打开的最大文件数(建议 65535 或更高)。

worker_connections: 单个工作进程能处理的最大连接数。

公式: 最大并发连接数 = worker_processes * worker_connections。

高并发下,Nginx如何提升10倍性能?

worker_rlimit_nofile 65535; # 突破系统默认的 1024 限制

events {
    worker_connections 10240; # 单个进程支持万级连接
    use epoll;               # Linux 下必选的高效 I/O 复用模型
    multi_accept on;         # 允许一次性接受多个新连接
}

 

三、减少握手开销: keepalive_timeout

在高并发场景下,频繁建立和关闭 TCP 连接(三次握手、四次挥手)会消耗大量 CPU 并导致 TIME_WAIT 连接堆积。

keepalive_timeout: 保持长连接的超时时间(如 60s)。

keepalive_requests: 这是提升性能的隐藏大招。

默认通常只有 100,意味着一个长连接处理 100 个请求后就会关闭。

在高并发场景下,应将其调大到 1000 甚至 10000。

高并发下,Nginx如何提升10倍性能?

http {
    keepalive_timeout 65;
    keepalive_requests 10000; # 增加单个长连接能处理的请求数
}

 

四、零拷贝与网络传输优化:sendfile

sendfile on: 开启“零拷贝”技术。

数据不需要经过内核态与用户态的反复拷贝,直接由内核读取磁盘并发送给网卡,极大地降低了 CPU 负载。

高并发下,Nginx如何提升10倍性能?

tcp_nopush on: 告诉 Nginx 在一个数据包里发送所有头文件,而不是一个接一个发送,提高网络效率。

tcp_nodelay on: 禁用 Nagle 算法,确保小数据包能实时发送,减少响应延迟。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧