要检查历史系统中硬件中断异常次数,核心是用 sar -i sum 或 sar -i all 读取对应日期的 sadd 文件,并关注 intr/s(每秒中断总数)和异常波动模式——因为 sar 本身不直接标记“异常”,需靠数值突变+比对基线来识别。

要检查历史系统中硬件中断异常次数,核心是用 sar -I SUM 或 sar -I ALL 读取对应日期的 saDD 文件,并关注 intr/s(每秒中断总数)和异常波动模式——因为 sar 本身不直接标记“异常”,需靠数值突变+比对基线来识别。
确认中断数据是否已采集
硬件中断统计依赖 sysstat 的 sa1 定时任务开启中断采集。默认部分发行版(如 Ubuntu)会禁用该功能:
- 执行
grep -v "^#" /etc/cron.d/sysstat | grep sa1,确认行末含-I参数(如/usr/lib/sa/sa1 -I 1 1),否则中断不会被记录 - 若无
-I,需编辑/etc/cron.d/sysstat,在 sa1 命令后追加-I,再重启服务:sudo systemctl restart sysstat - 检查目标日期文件是否存在:
ls -l /var/log/sysstat/sa$(date -d "2026-07-28" +%d)(例:查昨天即 7 月 28 日 → 查sa28)
读取指定日期的中断汇总数据
使用 -f 参数加载历史文件,并限定只看中断统计(-I SUM 表示所有中断总和,最常用):
- 查昨天(2026-07-28)全天中断频率:
sar -f /var/log/sysstat/sa28 -I SUM - 查昨天下午 14:00–16:00 的中断变化:
sar -f /var/log/sysstat/sa28 -I SUM -s 14:00:00 -e 16:00:00 - 想看每个中断号明细(如网卡、磁盘触发的中断):
sar -f /var/log/sysstat/sa28 -I ALL(输出较长,建议搭配| less)
识别异常中断行为的关键指标
中断本身高频不等于异常,关键看是否出现**非预期突增或周期性尖峰**:
-
突增判断:对比日常基线(如平时
intr/s在 500–1200,某时段飙升至 8000+ 且持续数分钟,大概率异常) - 周期性尖峰:每 30 秒/每分钟固定出现一次尖峰,可能对应 misconfigured timer、轮询驱动或硬件定时器故障
-
单个中断号霸榜:用
-I ALL发现某个中断号(如23或16)占总中断 90% 以上,结合cat /proc/interrupts可定位设备(如网卡、NVMe 控制器) -
伴随现象交叉验证:若中断激增同时
%iowait高但await正常,可能是驱动反复轮询;若%idle极低但%system不高,可能是中断处理函数卡死
辅助定位中断来源的实用命令
仅靠 sar 知道“有多少中断”,还需结合系统信息确认“来自哪里”:
- 查当前各中断号归属:
cat /proc/interrupts | head -20(看前 20 行,重点关注数字列和设备名列) - 查中断绑定的 CPU 核心:
cat /proc/interrupts | grep -E "^[0-9]+:" | awk '{print $1,$NF}' - 查疑似异常设备的驱动状态:
lspci -vv -s $(lspci | grep -i "eth\|nvme" | head -1 | awk '{print $1}') - 查内核是否有中断相关报错:
dmesg -T | grep -i "irq\|interrupt\|error" | tail -20











