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 -l 或 iptables -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进行子查询


