Nginx `worker_processes`与操作系统中断亲和力绑定实战

阿晨吖_5571

阿晨吖_5571

2026-09-24

657人浏览

原创

worker_cpu_affinity 与 irq 绑定必须协同:前者固定 nginx worker 进程到指定 cpu,后者将网卡中断(如 rx/tx)绑定至相同物理核,避免跨核缓存失效、tlb 刷新及抢占抖动;未优化时 p99 延迟可高出 2~3 倍。

nginx `worker_processes`与操作系统中断亲和力绑定实战

worker_processes 本身不绑定 CPU,它只决定启动几个 worker 进程;真正让进程“钉”在特定核心上运行的,是 worker_cpu_affinity 指令。而操作系统中断(IRQ)的亲和力绑定——比如网卡软中断、时钟中断等——是另一个独立但关键的协同层。两者不直接等价,但必须配合,否则即使 Nginx 工作进程绑好了核,频繁的 IRQ 打断仍会导致缓存抖动、延迟升高、QPS 波动。

为什么 IRQ 绑定不能忽略

Linux 内核默认把网络中断(如 eth0 的 RX/TX、softirq)分散到所有可用 CPU 上。若 Nginx 的某个 worker 绑在 CPU 3,而该网卡中断却大量落在 CPU 0~2,那 CPU 3 上的 worker 实际要频繁跨核接收软中断处理后的数据包,引发: - L3 缓存失效与跨 NUMA 访问延迟 - TLB 刷新开销上升 - worker 进程被抢占打断,响应时间毛刺增多 实测表明,在高吞吐静态服务中,未调 IRQ 亲和力时,P99 延迟可能比优化后高出 2~3 倍。

如何查看并绑定网卡中断亲和力

先查当前中断分布:

  • cat /proc/interrupts | grep -i eth —— 找出网卡对应中断号(如 45、46)
  • cat /proc/irq/45/smp_affinity_list —— 查当前允许运行的 CPU 列表(如 0,1,2,3)

再绑定到与 Nginx worker 对齐的物理核心(例如你设了 worker_processes 4 并用 worker_cpu_affinity 0001 0010 0100 1000,即绑定 CPU 0/1/2/3):

Nginx Config Linter
Nginx Config Linter

对 Nginx 配置文件进行语法检查、验证和安全、性能审计。

下载
  • echo 0-3 > /proc/irq/45/smp_affinity_list —— 把中断限制在这 4 个核内
  • 更精细做法:为每个 RX 队列单独绑定(需网卡支持多队列),如 echo 0 > /proc/irq/45/smp_affinity_list(RX queue 0 → CPU 0)、echo 1 > /proc/irq/46/smp_affinity_list(RX queue 1 → CPU 1)

与 Nginx worker 绑核的对齐原则

目标是让“请求路径”尽量在同一物理核完成:网卡收包 → 软中断处理 → epoll_wait 触发 → worker 进程读取 socket。推荐策略:

  • 若用 worker_cpu_affinity auto;(Nginx ≥1.9.10),优先启用 irqbalance --banirq=eth0 并手动绑定 IRQ 到物理核,避免超线程干扰
  • 四核物理机(无超线程):worker 绑 CPU 0/1/2/3 → IRQ 同样限定在 0-3,且建议按队列一对一(RX queue 0 ↔ CPU 0)
  • 八核带超线程(4 物理核 × 2 线程):worker_processes 设为 4,worker_cpu_affinity 设为 0001 0010 0100 1000(即只用 core0t0, core1t0, core2t0, core3t0)→ IRQ 也只绑定到这 4 个物理核的主逻辑 CPU(编号 0/2/4/6 或 0/1/2/3,依系统编号而定)
  • 容器/K8s 环境:IRQ 绑定须在宿主机侧完成,且只能绑定到容器实际可调度的 vCPU 对应的物理核范围(例如 K8s 分配 2 个 vCPU 给 Pod,对应宿主机 CPU 4 和 5,则 IRQ 只能设为 4,5)

验证是否真正协同生效

三步交叉验证:

  • ps -eo pid,psr,comm | grep "nginx: worker" —— 确认每个 worker 固定在预期 CPU(PSR 列稳定)
  • cat /proc/interrupts | grep "eth.*[0-9]" —— 查看各中断计数是否集中在你指定的 CPU 列上
  • perf top -C 0 -p $(pgrep -f "nginx: worker" | head -1) —— 在绑定 CPU 0 的 worker 上采样,若看到大量 __softirqentry_text_start 或 net_rx_action,说明软中断仍在本核高效处理

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

nginx 操作系统

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
视频服务器配置参数有哪些
视频服务器配置参数有哪些

视频服务器配置参数有处理器、内存、存储、视频编解码器、网络接口、视频输入输出接口、操作系统、安全性、环境适应性和成本。在搭建视频服务器时,需要根据实际需求和预算,合理选择这些参数,以实现高性能、高稳定性和低成本的目标。

2023.10.17

3760

11

linux的操作系统介绍
linux的操作系统介绍

Linux是一个灵活、稳定、安全的操作系统,适用于各种不同的应用场景,从个人电脑到服务器和嵌入式系统。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.20

3046

12

Linux操作系统的主要用途
Linux操作系统的主要用途

Linux操作系统用途广泛,包括:服务器运营,软件开发,科学研究和教育,嵌入式系统,以及个人电脑和笔记本电脑。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.21

5039

8

linux操作系统的作用
linux操作系统的作用

linux操作系统在以下领域发挥着关键作用:服务器和云计算;嵌入式系统;个人电脑和笔记本电脑;超级计算;其他领域等等。想了解更多linux操作系统的相关内容,可以阅读本专题下面的文章。

2024.04.12

2375

5

有哪些常见的网络操作系统
有哪些常见的网络操作系统

常见的网络操作系统有windows server、linux、unix、macos server、freebsd、cisco ios、juniper junos和hp-ux等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.12

2944

6

32位操作系统怎么改成62位的
32位操作系统怎么改成62位的

要将 32 位操作系统升级到 64 位,需要遵循以下步骤:1. 检查硬件和软件兼容性;2. 备份数据;3. 获取 64 位操作系统;4. 创建可启动安装媒体;5. 从安装媒体启动计算机;6. 选择“升级”选项;7. 完成安装。

2025.04.02

3183

9

服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

417

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

840

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2432

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习