0

0

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

舞夢輝影

舞夢輝影

发布时间:2026-01-23 17:54:09

|

792人浏览过

|

来源于php中文网

原创

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

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

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 上。

吐槽大师
吐槽大师

吐槽大师(Roast Master) - 终极 AI 吐槽生成器,适用于 Instagram,Facebook,Twitter,Threads 和 Linkedin

下载
  • 查当前 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(Receive 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+自定义批处理

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

891

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

32

2025.12.06

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 7.3万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 21.7万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 13.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号