net_rx softirq 高导致单核打满的网卡多队列 + irqbalance 配置

发布时间 - 2026-01-19 00:00:00    点击率:
net_rx softirq高导致单核CPU打满,本质是网络接收软中断未分散至多核:需验证网卡多队列启用状态、irqbalance运行及策略有效性、IRQ手动绑定合理性,并调优RX队列长度、GRO/LRO及softnet_stat参数。

net_rx softirq 高导致单核 CPU 打满,本质是网络接收软中断集中在某个 CPU 核上处理,而网卡多队列 + irqbalance 本应分摊负载,但配置不当或机制未生效时就会失效。

确认网卡是否真正启用了多队列

很多网卡默认只启用单个 RX 队列,即使硬件支持多队列,驱动没打开或固件限制也会退化为单队列。需逐层验证:

  • 查物理队列数:ethtool -l eth0(看 Current hardware settings 下的 RX 队列数,非 Supported max)
  • 查当前启用队列数:cat /sys/class/net/eth0/device/sriov_numvfs(仅 SR-IOV 场景)或更通用的:ls /sys/class/net/eth0/device/msi_irqs/(每个 IRQ 对应一个队列)
  • 查驱动是否启用多队列:grep "rx.*queue" /proc/interrupts | grep eth0,应看到多个形如 eth0-rx-0eth0-rx-1 的条目;若只有 eth0(无后缀),说明仍是单队列中断绑定

检查 irqbalance 是否运行且策略合理

irqbalance 不只是“开了就行”,它可能因配置、服务状态或内核参数被绕过:

  • 确认服务活跃:systemctl status irqbalance,且输出含 active (running)
  • 检查是否被禁用:查看 /proc/sys/kernel/irqbalance(值为 1 表示启用),或 cat /etc/default/irqbalance 中是否设了 ENABLED=0
  • 避免干扰策略:若使用 --banirq--hintpolicy=ignore 等参数,可能导致网卡 IRQ 被固定不动;建议用默认策略或显式指定:--hintpolicy=restrict
  • 观察实际分布:watch -n1 'grep eth0 /proc/interrupts',看各 RX 队列 IRQ 是否分散到不同 CPU;若长期只在 CPU0 触发,说明 irqbalance 没生效或被覆盖

手动绑定 IRQ 到 CPU(当 irqbalance 不可靠时)

某些场景(如实时性要求高、irqbalance 与内核版本兼容问题)推荐跳过 irqbalance,直接静态绑定:

  • 查网卡各 RX 队列对应的 IRQ 号:grep eth0-rx /proc/interrupts | awk '{print $1}' | tr -d ':'
  • 将 IRQ 绑定到特定 CPU 掩码(如绑到 CPU1~CPU7):echo 00fe > /proc/irq/[IRQ_NUM]/smp_affinity_list(十六进制掩码,00fe = CPU1~7)
  • 注意:需确保目标 CPU 不承担其他高负载任务(如应用进程、ksoftirqd),否则仍会打满;可配合 taskset 将业务进程绑到其余核
  • 持久化:写入 systemd service 或网络脚本,在网卡 up 后执行(因 IRQ 号可能随重启变化,建议用 udev rule + shell 脚本动态识别)

补充调优:降低 net_rx softirq 压力本身

分流只是治标,还需减少单次软中断要处理的数据量:

  • 增大 RX 队列长度:ethtool -G eth0 rx 4096(防丢包,也缓解突发冲击)
  • 启用 GRO/LRO(谨慎):ethtool -K eth0 gro on,合并小包减少中断次数;但会增加延迟和 CPU 解包开销,高吞吐低延迟场景慎用
  • 检查是否被 NAPI polling 阻塞:若 cat /proc/net/softnet_stat 第二列(dropped)持续增长,说明 softirq 处理不过来,需调大 net.core.netdev_budget(默认300)或优

    化协议栈路径


#   # .net  # echo  # print  # restrict  # class  # default  # tr  # 绑定  # 打满  # 掩码  # 也会  # 多个  # 开了  # 不承担  # 就行  # 不动  # 仍是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel定时任务怎么设置_Laravel Crontab调度器配置  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  如何在云主机快速搭建网站站点?  如何快速配置高效服务器建站软件?  微信推文制作网站有哪些,怎么做微信推文,急?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  canvas 画布在主流浏览器中的尺寸限制详细介绍  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  详解Oracle修改字段类型方法总结  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Linux系统命令中screen命令详解  zabbix利用python脚本发送报警邮件的方法  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何在阿里云通过域名搭建网站?  网站页面设计需要考虑到这些问题  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Python面向对象测试方法_mock解析【教程】  图册素材网站设计制作软件,图册的导出方式有几种?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  大同网页,大同瑞慈医院官网?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  如何快速启动建站代理加盟业务?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  如何用已有域名快速搭建网站?  如何在宝塔面板中修改默认建站目录?  如何快速搭建自助建站会员专属系统?  黑客如何通过漏洞一步步攻陷网站服务器?  MySQL查询结果复制到新表的方法(更新、插入)  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Python并发异常传播_错误处理解析【教程】  jQuery 常见小例汇总  如何续费美橙建站之星域名及服务?  Python图片处理进阶教程_Pillow滤镜与图像增强  企业网站制作这些问题要关注  如何确保FTP站点访问权限与数据传输安全?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何在IIS7中新建站点?详细步骤解析  Laravel如何处理和验证JSON类型的数据库字段  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧