我被这个困住了。
在两台物理机器上全新安装 Ubuntu 12.04 服务器 64 位。机器完全相同,只是其中一台有 8GB RAM,而问题机器有 32GB RAM,两台机器都是同时购买的,规格相同。Ubuntu 于 24 小时前完全更新。
我正在使用 virt-manager 通过 SSH 隧道上的 X-windows 来管理虚拟机,服务器操作系统根本不运行 X-windows 会话,我的桌面却运行。
构建并运行多个 Ubuntu 12.04 服务器 64 位虚拟机,每个虚拟机分配 1GB RAM。这些虚拟机的配置基本相同(宽容 MAC 地址等)。
8GB 机器有 2 个虚拟机,32GB 机器有 3 个虚拟机。所有虚拟机都报告低负载(小于 0.5,通常为 0.01),并且利用率根本不高。
8GB 主机服务器报告的负载小于 0.1,通常为 0.01。32GB 主机服务器报告的负载持续大于 10.0。同样,所有虚拟机报告的内部负载小于 0.5。顶部的 CPU 空闲率超过 95%,等待率为 0.0%。
为什么 32GB 机器负载很高(主机空闲且客户机空闲),而配置相同的 8GB 机器却报告预期的低负载?
启动一台虚拟机后,32GB 负载会升高,运行 3 台虚拟机不会使负载升高。停止所有虚拟机会导致 32GB 机器负载下降。
我无法理解。我预计 32GB 负载与 8GB 负载相匹配。
更新 #1:Nathan C
top - 16:19:54 up 8 days, 6:01, 1 user, load average: 14.33, 18.23, 18.07
Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.5%us, 0.4%sy, 0.0%ni, 98.9%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 32938864k total, 29307380k used, 3631484k free, 331324k buffers
Swap: 4182436k total, 0k used, 4182436k free, 25330400k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8752 libvirt- 20 0 3170m 747m 6932 S 7 2.3 26:27.20 /usr/bin/kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name r -uuid ...
8720 libvirt- 20 0 3969m 928m 6936 S 3 2.9 76:17.66 /usr/bin/kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name m -uuid ...
8687 libvirt- 20 0 3315m 1.0g 6936 S 2 3.3 60:33.03 /usr/bin/kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name d -uuid ...
答案1
经过一番调查,我发现了机器的问题所在。非常感谢那些提供帮助的人!
有帮助的网页在这里:http://itscblog.tamu.edu/improve-disk-io-performance-in-kvm/
基本上,我的物理主机有 SATA 磁盘,虚拟机配置了 SATA 控制器和 SATA 磁盘。我不知道这意味着虚拟化子系统将呈现虚拟 SATA 而不是 SATA 直通。
解决方案是将磁盘切换到 virtio。这意味着虚拟机现在意识到它们是虚拟化系统的一部分,并将合作以获得更好的性能。(我认为这就是它的意思)。
长话短说,始终在虚拟机上使用 virtio 作为磁盘和网络。
主机现在处于令人满意且冷静的负载平均值约 2-3。比以前的 20-50 好多了。