我不知道是什么或谁在使用这么多的 CPU,这台机器是双四核处理器,有 16 GB 的内存。运行 Ubuntu 10.04
除了一个核心似乎一直使用 100% 以外,每个核心似乎都使用了 10-20%。
目前,我有大约 14 个虚拟机在其上运行,其中一些有 4 个可用核心,但大多数只有 1 个。
在顶部我注意到:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7873 root 20 0 530m 14m 3220 S 103 0.1 5597:41 kvm
我尝试使用 kvm_stat:
kvm statistics
efer_reload 2400 0
exits 2199561167 6100
fpu_reload 1244255128 136
halt_exits 4368568581 1189
halt_wakeup 1714293806 103
host_state_reload 7549984578 1572
hypercalls 0 0
insn_emulation 1398403526 3069
insn_emulation_fail 3 0
invlpg 767635659 37
io_exits 2822598937 395
irq_exits 1449081931 283
irq_injections 4773146061 1220
irq_window 125330658 8
largepages 0 0
mmio_exits 326399432 0
mmu_cache_miss 192709243 7
mmu_flooded 69103717 4
mmu_pde_zapped 259908526 15
mmu_pte_updated 156 0
mmu_pte_write 329155981 19
mmu_recycled 856835 0
mmu_shadow_zapped 192679259 5
mmu_unsync 19380 -6
nmi_injections 0 0
nmi_window 0 0
pf_fixed 6517240715 389
pf_guest 4434843050 217
remote_tlb_flush 582797544 34
request_irq 0 0
signal_exits 5 0
tlb_flush 1708903974 201
但说实话,我不明白如何阅读这篇文章,也不知道如何知道某个地方是否存在瓶颈。一个进程怎么会达到 103% 的负载?这个线程相关吗?我应该担心吗?还是这是正常现象?
答案1
如果您在 top 中按下“c”键,您可以看到完整的命令并了解哪个是虚拟机(但 ps aux|grep 7873 也可以这样做)。
在您发现哪个 VM 正在生成这些 CPU 负载后,您应该检查它,例如它是否有一些卡住的进程或者它被挂起(通常,100%的 kvm 进程是 VM 在引导加载程序阶段卡住)。
答案2
一种可能的解释是:有一个指定的 CPU 负责处理网络接口的中断。这个指定的 CPU 负责全部入站数据包全部虚拟机。该指定 CPU 随后会中断分配给数据包目的地 VM 的 CPU。
英特尔对此的回答是 SR-IOV。如果您的网络接口非常快并且正在接收大量数据包,这也许可以解释为什么您会遇到这种情况。
祝你好运。如果这有帮助的话,我希望得到回复 :)