net_rx 软中断占比过高导致单核打满的定位与优化

发布时间 - 2026-01-23 00:00:00    点击率:
net_rx软中断单核过载本质是RSS配置不当导致流量集中,需通过/proc/softirqs和mpstat定位热点CPU,再用ethtool与smp_affinity_list检查并均衡网卡队列中断绑定,辅以GRO关闭、netdev_budget调优及RPS启用。

net_rx 软中断占比过高、导致某个 CPU 核心 100% 占用,本质是内核在该核上持续处理网络数据包收包软中断(NET_RX_SOFTIRQ),来不及返回调度,其他任务被饿死。关键不是“软中断多”,而是“单核集中处理”和“处理不过来”。定位要分三步:确认现象、锁定瓶颈点、验证优化效果。

确认是否真是 net_rx 软中断压满单核

别只看 top 或 htop 的 cpu 使用率——它们把软中断(si)和硬中断(hi)混在 system(sy)里,容易误判。用下面命令看真实分布:

  • cat /proc/softirqs:重点关注 NET_RX 行,对比各 CPU 列数值。若某列远高于其他(比如 cpu0 是 cpu1 的 5 倍以上),说明流量集中在该核
  • mpstat -P ALL 1:观察每秒的 %soft 字段,确认是否某核 %soft 持续 >90%
  • cat /proc/interrupts | grep -i eth:检查硬中断(如 eth0-TxRx-0)是否也集中在同一核——软中断常由同核硬中断触发,二者绑定过紧会雪上加霜

检查网卡中断亲和性与 RSS 配置

现代多队列网卡(如 ixgbe、i40e、mlx5)默认开启 RSS(Receive Side Scaling),但若未正确配置,所有队列中断可能仍落到同一个 CPU 上。

  • 查当前 RSS 队列数:ethtool -l eth0(看 Combined 或 RX 队列数)
  • 查中断亲和性:cat /proc/irq/*/smp_affinity_list 2>/dev/null | grep -A1 "eth0",确认每个队列中断是否分散到不同 CPU
  • 手动均衡(示例:将 eth0 的 8 个 RX 队列均匀绑到 cpu0–cpu7):
    echo 0 > /proc/irq/$(cat /proc/interrupts | grep "eth0-TxRx-0" | awk '{print $1}' | sed 's/://')/smp_affinity_list
    依此类推设置 1~7;更稳妥用脚本或 irqbalance(确保它没被禁用且配置合理)

排查驱动与协议栈瓶颈点

即使中断分散了,若单队列处理慢,仍可能压垮对应 CPU。常见瓶颈包括:

  • 小包风暴:MTU=1500 的包,每秒 50 万 pkt 就足以打满单核 softirq 处理能力。用 tcpdump -i eth0 -c 1000 -w /tmp/pkts.pcap 2>/dev/null & & ss -i 结合 ifconfig 看 RX packets/sec 和 errs/drop,确认是否丢包伴随高 softirq
  • GRO/LRO 开启不当:GRO 在软中断中聚合,反而增加开销。对小包场景可关闭:ethtool -K eth0 gro off(LRO 通常硬件做,无需关)
  • Netfilter 规则过多:iptables/nftables 的 INPUT 链规则会在 net_rx 软中断上下文执行(尤其是 raw 和 mangle 表)。用 nft list ruleset | wc -liptables -t raw -L -n -v 查复杂度,精简非必要规则

内核参数与应用层协同调优

纯靠调参不能替代架构优化,但能缓解短期压力:

  • 降低单次软中断处理包数上限,避免 monopolize:echo 64 > /proc/sys/net/core/netdev_budget(默认 300,太大会卡住调度;64~128 较稳)
  • 启用 RPS(R

    eceive Packet Steering)作为 RSS 补充(尤其虚拟化或老网卡):
    echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus(十六进制掩码,f=cpu0–3)
  • 应用层配合:避免单连接高频小包(如 HTTP/1.1 不复用、日志直写 socket)。改用批量上报、启用 TCP_NODELAY+writev、或切到 UDP+自定义批处理


# node  #   # 热点  # 虚拟化  # 架构  # echo  # print  # NULL  # class  # input  # http  # udp  # tcpdump  # 绑定  # 应用层  # 尤其是  # 依此类推  # 会在  # 批处理  # 雪上加霜  # 自定义  # 再用  # 过高 


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


相关推荐: C语言设计一个闪闪的圣诞树  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何用花生壳三步快速搭建专属网站?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  java获取注册ip实例  nginx修改上传文件大小限制的方法  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  详解Oracle修改字段类型方法总结  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何解决hover在ie6中的兼容性问题  iOS发送验证码倒计时应用  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Mybatis 中的insertOrUpdate操作  Laravel如何自定义分页视图?(Pagination示例)  中国移动官方网站首页入口 中国移动官网网页登录  微信小程序 配置文件详细介绍  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  如何在服务器上配置二级域名建站?  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何实现一对一模型关联?(Eloquent示例)  如何快速搭建个人网站并优化SEO?  如何在宝塔面板创建新站点?  深圳网站制作的公司有哪些,dido官方网站?  如何快速配置高效服务器建站软件?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何快速搭建二级域名独立网站?  制作企业网站建设方案,怎样建设一个公司网站?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Python函数文档自动校验_规范解析【教程】  西安专业网站制作公司有哪些,陕西省建行官方网站?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel API资源类怎么用_Laravel API Resource数据转换  如何在IIS中新建站点并解决端口绑定冲突?  如何在橙子建站中快速调整背景颜色?  微信小程序 HTTPS报错整理常见问题及解决方案  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在云服务器上快速搭建个人网站?  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何安全更换建站之星模板并保留数据?  如何在阿里云通过域名搭建网站?  怎样使用JSON进行数据交换_它有什么限制  Laravel如何使用Eloquent进行子查询