ksoftirqd 高占用但 net_rx 正常的 block softirq / timer softirq 排查
发布时间 - 2026-01-28 00:00:00 点击率:次ksoftirqd占用高但NET_RX正常,说明问题在BLOCK或TIMER softirq而非网络接收路径;需通过/proc/softirqs变化速率、/proc/irq/*/spurious、perf trace及存储设备状态等综合定位根因。
为什么 ksoftirqd 占用高但 net_rx softirq 统计正常
这通常意味着问题不在网络接收路径本身,而是其他 softirq 类型(尤其是 block 或 timer)在持续触发、排队或执行时间过长,导致 ksoftirqd 线程忙于处理 backlog。注意:/proc/softirqs 中的 NET_RX 计数只反映被触发次数,不反映单次执行耗时;即使它增长平缓,只要某次 block softirq 处理花了 20ms,就可能阻塞后续所有 softirq 调度,ksoftirqd 就会持续跑满。
确认到底是 block 还是 timer softirq 在作祟
直接看 /proc/softirqs 各列累计值变化速率:
watch -n1 'grep -E "^(BLOCK|TIMER)" /proc/softirqs'
更关键的是观察每 CPU 的实时 pending 和延迟:
-
cat /proc/irq/*/spurious—— 查看是否有异常中断风暴(尤其 SCSI/NVMe 驱动 bug 可能引发虚假中断 → 触发大量TIMERsoftirq) -
perf record -e irq:softirq_entry -g -- sleep 5+perf script | grep -E "(block|timer)"—— 定位实际进入 softirq 的调用栈源头 - 检查
/sys/block/*/stat是否有某设备io_ticks暴涨但reads_completed几乎不动 —— 典型 IO hang 导致BLOCKsoftirq 卡住
block softirq 卡住的常见根因和验证方式
BLOCK softirq 主要由块设备驱动在完成 IO 后触发(如 blk_mq_complete_request),卡住往往不是软中断本身慢,而是它依赖的上下文被阻塞:
- 文件系统层锁竞争:比如 XFS 的
log wait或 ext4 的journal commit持久阻塞,用cat /proc/fs/xfs/xfsstats | grep xs_log_waits或dmesg -T | grep -i "journal.*wait"查 - 底层存储响应超时:NVMe 设备掉盘、RAID 卡降速、iSCSI target 延迟突增,用
smartctl -a /dev/nvme0n1、cat /sys/class/scsi_host/host*/stat、iscsiadm -m session -P 3排查 - IO 调度器死锁:CFQ 已淘汰,但某些定制内核仍用,或
mq-deadline在高队列深度下出现请求合并异常,临时切到none测试:echo none > /sys/block/nvme0n1/queue/scheduler
timer softirq 异常升高的典型场景
TIMER softirq 占用高,大概率不是定时器太多,而是某个 timer handler 执行太久,或 timer 频繁重调度形成“timer storm”:
- 用户态进程频繁调用
nanosleep、epoll_wait(带 timeout)、select,且 timeout 极短(如 1ms),内核需为每个调用注册/注销高精度 timer —— 用perf record -e 'syscalls:sys_enter_nanosleep' -- sleep 2抓嫌疑进程 - 内核模块 bug:比如某些旧版 RDMA 驱动、DPDK PMD、或自研驱动在
mod_timer时传入已销毁的 timer 结构体,导致 softirq 循环重试 - RCU stall 间接引发:当 RCU callback 积压,内核会通过
TIMERsoftirq 强制推进,查dmesg | grep -i "rcu.*stall"和/proc/sys/kernel/rcu_normal值
真正难排查的是 softirq 在不同 CPU 间迁移不均 + 某个 CPU 上 block/timer handler 有隐式锁等待,这时候单看统计值会误判,必须结合 perf sched latency 和 per-CPU 的 /proc/softirqs 快照交叉比对。
# session
# 栈
# ai
# 为什么
# echo
# select
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
如何实现建站之星域名转发设置?
香港网站服务器数量如何影响SEO优化效果?
黑客如何利用漏洞与弱口令入侵网站服务器?
python中快速进行多个字符替换的方法小结
电商网站制作价格怎么算,网上拍卖流程以及规则?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
浅述节点的创建及常见功能的实现
Laravel如何使用查询构建器?(Query Builder高级用法)
历史网站制作软件,华为如何找回被删除的网站?
Laravel如何记录自定义日志?(Log频道配置)
如何在Windows 2008云服务器安全搭建网站?
如何为不同团队 ID 动态生成多个“认领值班”按钮
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何快速搭建二级域名独立网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
详解jQuery中的事件
C#如何调用原生C++ COM对象详解
制作企业网站建设方案,怎样建设一个公司网站?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel怎么上传文件_Laravel图片上传及存储配置
iOS中将个别页面强制横屏其他页面竖屏
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Laravel如何处理表单验证?(Requests代码示例)
网站制作软件免费下载安装,有哪些免费下载的软件网站?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
,南京靠谱的征婚网站?
Laravel怎么在Controller之外的地方验证数据
网站图片在线制作软件,怎么在图片上做链接?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
详解jQuery中基本的动画方法
Angular 表单中正确绑定输入值以确保提交与验证正常工作
如何在万网自助建站中设置域名及备案?
轻松掌握MySQL函数中的last_insert_id()
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Laravel如何配置Horizon来管理队列?(安装和使用)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
高防服务器租用首荐平台,企业级优惠套餐快速部署
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何在万网开始建站?分步指南解析
phpredis提高消息队列的实时性方法(推荐)
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
常州企业网站制作公司,全国继续教育网怎么登录?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
JS中页面与页面之间超链接跳转中文乱码问题的解决办法


