reuseport 是提升 Nginx 多核吞吐的基础,需配合合理 worker_processes、调优 somaxconn、关闭 accept_mutex,并在双机热备与多队列网卡(RSS/RPS/XPS)协同下,实现内核级连接分发、消除惊群与锁竞争,最终达成高并发低延迟。
直接在 Nginx 的
指令后加
,再结合双机热备与多队列网卡调度,是压榨现代服务器端口吞吐的成熟路径。它不靠堆硬件,而是让内核、网卡、进程三者协同工作——连接进来时就分好流,不排队、不争抢、不跨核。
reuseport 是基础,但不是全部
它让每个 worker 进程拥有独立监听 socket,由内核按五元组哈希分发新连接,彻底规避“惊群”和 accept 锁竞争。但这只是第一步:
若
设为 1,哪怕开了 reuseport,也只有一个进程干活,多核闲置
若
还是默认的 128,全连接队列很快溢出,客户端看到 connection refused
若没关
,Nginx 会在用户态再加一层锁,抵消内核层优化
双机热备必须适配 reuseport 语义
Keepalived + VIP 场景下,reuseport 不是“可选增强”,而是故障切换时维持吞吐的关键:
主备节点都需启用 reuseport,且配置完全一致(包括 IPv4/IPv6 所有 listen 行)
切换瞬间,备机要能立即用多个 worker 并行 accept 新连接,而不是等单个进程从 backlog 里慢慢取
配合
和主动
,确保 VIP 绑定后,新连接能被多个 socket 同时承接
多队列网卡(RSS/RPS/XPS)是最后一环
光有 reuseport 和多 worker,若网络中断集中在单个 CPU,软中断处理仍会成为瓶颈。需对齐三层绑定:
RSS
:网卡硬件将不同流哈希到不同 RX 队列,对应不同 CPU(需 BIOS 开启 SR-IOV 或 RSS)
RPS
:软件层面将单队列软中断分发到多 CPU(
)
XPS
:发送队列绑定到特定 CPU(避免跨核写缓存),配合
让每个 worker 独占核心
验证是否真正跑通整条链路
不能只看 Nginx 启动成功,要分层确认:
—— 显示多个 nginx worker 分别监听
,PID 各不相同
—— RX 中断分散在多个 CPU 上,非集中于 CPU0
——
、
调用大幅下降,无明显锁函数热点
Keepalived 切换后 1 秒内,
观察各 worker CPU 使用率快速均衡上升,而非单核飙高
不复杂但容易忽略
listenreuseportworker_processesnet.core.somaxconnaccept_mutex onpreempt onarping -U/sys/class/net/ens33/queues/rx-0/rps_cpusworker_cpu_affinity autoss -tlnp | grep :80*:80cat /proc/interrupts | grep ens33perf top -p $(pgrep nginx)sys_accept4inet_csk_accepttop -H