Nginx百万并发优化之道(10倍性能关键)

Nginx是大型架构核心,下面我详解Nginx百万并发优化之道@mikechen

Nginx百万并发优化

Nginx 之所以适合高并发,核心在于其事件驱动、异步非阻塞的设计。

它并不为每个连接创建一个线程或进程,而是通过少量 worker 进程配合 epoll/kqueue 等事件机制,统一管理大量连接。

Nginx百万并发优化之道(10倍性能关键)-mikechen

首先要关注的是 Nginx 自身的核心参数。

1. worker_processes
通常建议设置为与 CPU 核数相同,或使用 auto 让 Nginx 自动适配。这样可以充分利用多核能力,避免单进程成为瓶颈。

2. worker_connections
它决定单个 worker 可处理的最大连接数。

理论上总并发约等于 worker_processes × worker_connections,但实际会受到系统文件句柄限制和上游连接数影响。

百万并发场景下,这一参数通常需要配合系统级 ulimit 和 nofile 一起提升。

worker_processes auto;
worker_rlimit_nofile 1048576;

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}

 

Nginx内存参数优化

Nginx 的性能高度依赖 Linux 内核网络栈,因此系统参数优化是必不可少的一环。

Nginx百万并发优化之道(10倍性能关键)-mikechen

1. 提升文件描述符限制
包括 ulimit -n/etc/security/limits.conf 以及 systemd 配置中的 LimitNOFILE。百万并发几乎一定需要极高的 fd 上限。

2. 调整 TCP 相关参数
例如:

  • net.core.somaxconn:增大连接队列长度;
  • net.ipv4.tcp_max_syn_backlog:提升半连接队列;
  • net.ipv4.ip_local_port_range:扩大本地端口范围;
  • net.ipv4.tcp_tw_reuse:合理回收 TIME_WAIT 连接;
  • net.core.netdev_max_backlog:提高网络包排队能力。
# 文件描述符
fs.file-max = 10000000
fs.nr_open = 10000000

# 监听与 SYN 队列
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 100000

# TIME_WAIT 复用(减少端口耗尽)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.ip_local_port_range = 1024 65535

 

Nginx进一步优化方向
百万并发下的 Nginx 优化,本质上不是“调几个参数”这么简单,而是一项系统工程。
Nginx百万并发优化之道(10倍性能关键)-mikechen
这里,还会涉及到:
方向
关键手段
效果
减少磁盘 IO
sendfile on + open_file_cache、DirectIO、SSD/NVMe
静态资源大幅提升
压缩与缓存
gzip / brotli、proxy_cache、fastcgi_cache
降低带宽与后端压力
上游连接
keepalive + zone 共享
减少后端建连
日志
降低级别、异步写入、或关闭 access_log
减少磁盘瓶颈
限流
limit_req / limit_conn
防雪崩
硬件
万兆/40G 网卡、多队列 RSS、足够内存
真正极限
评论交流
    说说你的看法