Nginx惊群效应是什么?如何来解决?

Nginx是大型架构核心,下面我详解Nginx惊群效应@mikechen

Nginx惊群效应

惊群效应, 是高并发编程中一个著名的现象。

Nginx惊群效应是什么?如何来解决?-mikechen

指的是当多个进程或线程在等待同一事件时,事件发生后,所有等待者(或大部分)都被唤醒。

但最终只有一个进程或线程能成功处理该事件,而其他被唤醒的进程或线程又会立即进入休眠状态。

对于 Nginx 来说,惊群效应主要发生在 新连接到达 时。

为什么会出现惊群效应

主要原因只有一个:

多个 worker 同时监听同一个端口,争抢 accept 新连接。

Nginx惊群效应是什么?如何来解决?-mikechen

在高并发短连接场景下:

连接建立非常频繁,每次新连接都会触发多个 worker 被唤醒;

但最终只会有一个成功 accept。

 

惊群效应解决方案

1️⃣ accept_mutex(通用方案)

worker 之间加锁,同一时刻只允许一个 worker accept 连接

accept_mutex on;

2️⃣ reuseport(最优方案)

每个 worker 独立监听端口

内核态分发连接,彻底避免竞争

listen 80 reuseport;

 

3️⃣ multi_accept(辅助优化)

worker 一次 accept 多个连接

减少唤醒次数

multi_accept on;

 

4️⃣ 减少连接建立(根本方案)

启用 KeepAlive

upstream 连接复用

keepalive_timeout 60;

mikechen睿哥

10年+一线大厂架构实战专家,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。

评论交流
    说说你的看法