node exporter v1.3.0+原生支持node_interrupts_total指标,可采集各cpu核心上每irq的触发次数,是分析硬中断不均的核心数据源;需确认interrupts收集器启用、验证/proc/interrupts可读,并用promql定位热点irq与冷核,结合smp_affinity、rps/rfs及cpu拓扑排查根因。

可以。Prometheus 本身不直接暴露 IRQ 分布细节,但 Node Exporter 从 v1.3.0 起已原生支持 node_interrupts_total 指标,并完整采集每个 CPU 核心上各中断号(IRQ)的触发次数——这正是分析硬中断不均的核心数据源。
确认 Node Exporter 已启用 interrupts 收集器
默认情况下,Node Exporter 启动时会启用 interrupts 收集器(Linux 内核 2.6+),但需验证是否生效:
- 访问被监控服务器的
http://<host>:9100/metrics</host>,搜索node_interrupts_total,应看到形如:
node_interrupts_total{cpu="0",device="IO-APIC-fasteoi-22",type="edge"} 1248567<br>node_interrupts_total{cpu="1",device="IO-APIC-fasteoi-22",type="edge"} 892<br>node_interrupts_total{cpu="0",device="PCI-MSI-32768",type="level"} 2304120- 若无结果,说明收集器被禁用。启动时添加参数:
--collectors.enabled=interrupts,cpu,meminfo,diskstats(显式包含 interrupts) - 注意:该指标依赖
/proc/interrupts文件,普通用户运行需确保文件可读(通常默认满足)
识别关键中断源与 CPU 分布偏差
用 PromQL 定位“热点 IRQ”和“冷核”:
-
按设备聚合总中断量(找高频设备):
sum by (device) (rate(node_interrupts_total[5m])) -
看某设备在各 CPU 的分布比例(查不均):
100 * rate(node_interrupts_total{device=~"eth0|nvme|ioapic"}[5m]) / ignoring(cpu) group_left sum(rate(node_interrupts_total{device=~"eth0|nvme|ioapic"}[5m])) -
单核 IRQ 偏差率(量化不均程度):
(max by (cpu) (rate(node_interrupts_total[5m])) - min by (cpu) (rate(node_interrupts_total[5m]))) / avg by (cpu) (rate(node_interrupts_total[5m]))
典型异常模式:某网卡中断 99% 落在 CPU 0,其余核几乎为 0;或 NVMe 队列中断全部挤在单个 CPU 上。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
关联硬件拓扑与内核调度行为
仅看计数不够,需结合系统上下文定位根因:
- 检查中断亲和性(
smp_affinity):cat /proc/irq/<n>/smp_affinity_list</n>—— 看是否被人为绑定到单核 - 确认是否启用 RPS/RFS(软件负载均衡):
cat /sys/class/net/eth0/queues/rx-0/rps_cpus(需内核支持且开启) - 查看 CPU topology:
lscpu | grep "CPU\(s\)\|NUMA",排除 NUMA 跨节点中断延迟导致的调度回避 - 对比
node_cpu_seconds_total{mode="irq"}—— 若某核 irq 时间占比持续 >5%,说明中断处理已成性能瓶颈
在 Grafana 中构建 IRQ 均衡性看板
推荐至少包含三类视图:
-
热力图(Heatmap):X=时间,Y=IRQ 设备名,颜色=该设备在各 CPU 的中断速率(用
heatmappanel +rate(node_interrupts_total[2m])) -
TopN 设备分布条形图:显示前 5 个高中断设备,每根柱子拆分为各 CPU 占比(用
Bar gauge或Time serieswith stacking) -
偏差告警面板:用
Statpanel 显示当前最大偏差率(上文第三条 PromQL),阈值设为 80%,超限即标红
注意:避免使用过短的采样窗口(如 30s),建议用 2–5 分钟区间,过滤瞬时抖动。










