我有一个四核,并且我在 munin(监控中断和上下文切换)上发现,我的中断和上下文切换峰值达到每秒 25k 次,而平均值在一段时间内为 250。
不知道发生了什么,也不知道这意味着什么,除了根据我的监控工具这是一个异常现象。
这发生在我的一个 openVZ 虚拟容器中。
注意:同时,负载飙升至 2.5,并且 CPU 使用率也处于同一水平:系统 110%、用户 15% 和 IOwait 100%。
我已附加主机上 /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
答案1
这将是执行大量锁定的多线程应用程序。每次锁定时,CPU 都会抢占其时间并允许另一个线程运行。您可以编写 M/T 应用程序,将其所有时间都花在线程之间,最终这些线程都没有做任何有用的工作,而且由于它们导致所有这些上下文切换,CPU 在切换线程上花费的时间比线程本身完成工作的时间还要多。
查看在这些峰值期间应用程序的 CPU 使用率是否出现峰值。
答案2
这可能是监控系统产生的数字伪影,由非常短的时间片段引起。也许这只是您在这里看到的采样效应。
答案3
可能是 Linux 内核定时器(CONFIG_HZ
) 是否设置为定期触发,频率为 250Hz?检查内核配置文件。还有其他频率可供选择。