按1键可启用top多核视图,每行显示各CPU核心的hi(硬件中断)、si(软件中断)和st(steal时间);st仅在虚拟机中有效,物理机恒为0;高hi/si需结合/proc/interrupts和/proc/softirqs进一步分析。

在 Linux 系统中,top 本身不直接显示每个 CPU 核心的 中断(hi/si) 和 steal 时间(st) 的详细分布,但可以通过组合操作和关键按键,让这些指标在多核视图中可见并可解读。
启用多核 CPU 详细视图
启动 top 后,默认只显示汇总的 CPU 行(%Cpu(s): ...)。要查看每个逻辑 CPU 的独立指标:
- 按 1 键(数字一),界面会立即切换为每核一行的显示格式,例如:
%Cpu0 : 2.1 us, 0.5 sy, 0.0 ni, 97.0 id, 0.1 wa, 0.2 hi, 0.1 si, 0.0 st
%Cpu1 : 1.8 us, 0.6 sy, 0.0 ni, 97.2 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
此时每行末尾的 hi(硬件中断)、si(软件中断)、st(steal time)就对应各自核心的实时占用比例。
- 该功能依赖内核支持,仅在 Linux 2.6.24+ 且配置了
CONFIG_IRQ_TIME_ACCOUNTING时,hi/si 才能准确统计;st 仅在虚拟机中有效(KVM/Xen/VMware),物理机始终为 0。
确认 steal 时间是否可用
steal 时间反映的是虚拟机 CPU 时间被宿主机抢占的情况。判断当前是否处于虚拟环境中:
- 运行
systemd-detect-virt或cat /sys/hypervisor/type,若输出非空(如kvm、xen),则 st 值有意义; - 若在物理服务器上看到 st > 0,说明系统可能误报或内核异常,需进一步排查;
- top 中 st 列为 0 是正常现象,不代表监控失效,而是环境特性。
观察中断行为的实用技巧
高 hi 或 si 通常指向底层事件频繁触发,但 top 无法指出具体中断源。可配合以下方法定位:
- 当发现某核心 hi 持续高于 1%~2%,用
cat /proc/interrupts查看各 IRQ 分布,重点关注网卡(eth0、enp0s3)、时钟(timer)、PCIe 设备等行; -
si 升高常与内核软中断负载相关,比如大量网络包处理(net_rx_action)、定时器调度(hrtimer_run_queues),可结合
cat /proc/softirqs验证; - 若某核心 hi + si 合计长期超 10%,而 us/sy 很低,说明系统正被中断“淹没”,可能需调优 IRQ 亲和性(
echo $mask > /proc/irq/$N/smp_affinity)或检查硬件异常。
补充:用批处理模式导出多核中断数据
如需记录一段时间内的多核中断变化,可用 batch 模式抓取原始数据:
-
top -b -n 1 -1 | grep -E "^%Cpu|hi|si|st"—— 输出当前各核 hi/si/st 值; - 搭配
watch -n 2 'top -b -n 1 -1 | grep -E "^%Cpu[0-9]|hi|si|st"'实现每 2 秒刷新观察; - 注意:
-1参数必须小写 L(不是数字 1)才能启用多核显示,部分旧版 top 可能需用-1或--one-cpu-per-line(取决于版本)。


















