我有一个四核,我在 munin(监视中断和上下文切换)上发现,我的中断和上下文切换飙升至每秒 25k,而一段时间内的平均值为 250。
不知道发生了什么,也不知道这意味着什么,除了根据我的监控工具这是异常情况。
这发生在我的一个 openVZ 虚拟容器中。
注意:同时,负载飙升至 2.5,CPU 使用率同时达到 110% 系统、15% 用户和 100% IOwait。
我已在主机上附加了 /proc/interrupts 的输出。
CPU0 CPU1 CPU2 CPU3
0: 48039108 56660082 56431151 51696624 IO-APIC-edge timer
1: 0 3 0 0 IO-APIC-edge i8042
4: 4 4 1 3 IO-APIC-edge serial
8: 1 0 0 0 IO-APIC-edge rtc
9: 0 0 0 0 IO-APIC-level acpi
12: 4 0 0 0 IO-APIC-edge i8042
50: 15 16 16 16 IO-APIC-level ata_piix
66: 11113 0 0 56276172 PCI-MSI eth0
169: 12839820 4849263 1080 1167 IO-APIC-level ioc0
225: 6 7 5 5 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb4
233: 0 0 0 0 IO-APIC-level uhci_hcd:usb3
NMI: 17173 16340 16694 17306
LOC: 214221117 214220936 214196385 214196306
ERR: 0
MIS: 0
这将是一个执行大量锁定的多线程应用程序。每次它锁定时,CPU 都会抢占它的量程并允许另一个线程运行。您可以编写将所有时间都花在线程之间晃动的 M/T 应用程序,这些应用程序最终都没有做任何有用的工作,并且由于它们导致所有这些上下文切换,CPU 切换线程所花费的时间比线程本身所花费的时间更多做工作。
查看在这些峰值期间应用程序的 CPU 使用率是否出现峰值。
这可能是监控系统产生的数字伪影,由非常短的时间片引起。也许这只是您在这里看到的采样效果。
可能是 linux 内核计时器 (
CONFIG_HZ
) 设置为定期触发,频率为 250Hz?检查内核配置文件。还有其他频率可供选择。