在运行 Fedora 20 的 KVM 机器上,我运行了ulimit -s unlimited
(这消除了堆栈大小的限制)和一个实验性的折磨测试脚本。这个脚本所做的只是无限递归:
#!/bin/bash
fn() {
true
fn
}
fn
我预计 CPU 使用率会达到 100%,并且在一些资源耗尽(这可能需要很长时间)之后,bash 最终会被内核击落。
但真正发生的事情有点奇怪,我没有正确的知识来解释:
在虚拟机内部,top 报告这个有趣的脚本的 CPU 使用率为 100%。这就说得通了。
但从外部看,virt-manager 显示 0% 无 CPU 使用率,预计会反复出现 100% 的峰值。好像这还不够奇怪,每个连续峰值之间观察到的延迟正在增长(最终延迟停止增长并变得一致):
为什么是这样?里面到底发生了什么?或者 virt-manager 报告的用法是否具有误导性?那么是什么造成了峰之间的图案呢?
答案1
如果您在虚拟机内使用 top,您会注意到 cpu 使用率约为 100%,但在物理主机中,虚拟机无法使用所有 cpu 时间,这是因为从内核角度来看,kvm vm 是正常的正常进程,因此内核进程调度程序与其他进程共享CPU