Nginx并发性能优化:提升10倍性能关键!

在高并发场景下,Nginx 的性能优化往往决定了系统的上限@mikechen

worker_connections优化(最重要)

这是:单Worker最大连接数。

默认:worker_connections 1024;

Nginx并发性能优化:提升10倍性能关键!-mikechen

worker_connections 1024;

意味着:单Worker:最多1024连接。

如果:worker_processes 8,理论最大连接:8 × 1024 = 8192,这在高并发下根本不够。

你还需要提升连接数量,比如:

events {
    worker_connections 65535;
}

 

打开文件数优化(重要)

很多人:把 worker_connections 调到65535。

Nginx并发性能优化:提升10倍性能关键!-mikechen

结果:Nginx启动报错。

原因:

ulimit -n

默认可能:1024,无法支撑高并发。

你还需要修改=:

ulimit -n 65535

这是因为:Nginx本质上依赖文件描述符来维护连接。

若系统允许的打开文件数过低,即便worker_connections配置再高也无济于事。

 

内核的优化(重要)

Nginx 的上限最终取决于 Linux 内核,需要修改 /etc/sysctl.conf:

Nginx并发性能优化:提升10倍性能关键!-mikechen

net.core.somaxconn: 调大挂起连接队列的最大长度。

net.ipv4.tcp_max_syn_backlog: 调大 SYN 队列。

net.ipv4.ip_local_port_range: 扩大本地端口范围(反向代理至关重要)。

# 临时生效示例
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.tcp_tw_reuse=1 # 开启连接复用

 

减少握手开销(重要)

长连接,可以显著降低高并发下的 TCP 握手(三路握手)、和挥手带来的延迟和 CPU 损耗。

Nginx并发性能优化:提升10倍性能关键!-mikechen

keepalive_timeout: 保持连接的时长。

keepalive_requests: 一个长连接上最多处理的请求数,高并发下需调大。

http {
    keepalive_timeout 65;
    
    # 增加单连接请求数,避免频繁重连
    keepalive_requests 1000;
    
    # 对后端 upstream 也要开启长连接
    upstream backend_server {
        server 127.0.0.1:8080;
        keepalive 32; # 保持与后端的长连接池
    }
}

总之,Nginx并发连接优化,本质上是一项“系统工程”,并非单纯修改一个参数就能解决。

真正高效的做法,是从Nginx配置、操作系统限制、网络参数、业务连接模型四个层面协同优化。

评论交流
    说说你的看法