我有一台运行 Windows 2008 64 位 Hyper-V 的服务器,具有 8GB RAM 和 Intel Xeon X3440 @ 2.53 Ghz,这为我在主机系统上的性能监视器中提供了 8 个逻辑核心。
我已经设置了三台虚拟机,全部运行 Windows 2008 32 位。
- 构建服务器,运行Team City
- 暂存服务器
- SQL Server,运行 SQL Server 2005
我在设置过程中遇到了一些麻烦,因为即使虚拟机的 CPU 似乎以 100% 的速率运行,并且运行缓慢且没有响应,主机监视器仍始终保持响应。(我已经就此提出了另一个问题。)
所以这里的问题是:监控物理 CPU 实际使用情况的最佳方法是什么?我问这个问题的原因是有人告诉我,我无法可靠地使用任务管理器来监控虚拟机中的 CPU 使用率。
答案1
首先,您必须记住,在 Hyper-V 中,“主机”称为父分区,它实际上就像具有特殊权限和角色的虚拟化客户机。与任何其他子/客户机一样,当您打开任务管理器时,您无法看到服务器上其他子进程的 CPU 使用率。
Ben Armstrong 在这里对此有一个很好的解释:http://blogs.msdn.com/virtual_pc_guy/archive/2008/02/28/hyper-v-virtual-machine-cpu-usage-and-task-manager.aspx
总结一下他的帖子,你需要检查三件事才能准确了解 CPU 利用率:
查看每个客户的 CPU 使用情况 - 可通过Hyper-V 管理器或性能监视器。
由于上下文切换导致的 CPU 使用率 - 这是 perfmon 计数器 虚拟机管理程序运行时间百分比在 Hyper-V 虚拟机管理程序虚拟处理器下
子分区工作进程 -虚拟机管理程序在父分区上运行(每个子分区 1 个)。这将处理 Hyper-V 操作,例如保存状态。
答案2
你可以 - 只是你必须确保将东西放入 RELATION 中。我自己使用资源监视器。你的情况是 8 个核心,3 个虚拟 CPU,所以所有虚拟机上的 100% 大约是物理的 37.5% ;)
SCVMM(系统中心虚拟机管理器)和 SCOM(系统中心操作管理器)一起是一个很好的工具,但是它们本身就比您当前拥有的硬件还要多。
答案3
$ClusterNode = "Host01"
While ($True)
{
$ChildCPU = ((Get-Counter -ComputerName $ClusterNode -Counter "\Hyper-V Hypervisor Logical Processor(_Total)\% Total Run Time" -MaxSamples 3).CounterSamples | Measure-Object CookedValue -Max).Maximum
$ParentCPU = ((Get-Counter -ComputerName $ClusterNode -Counter "\Processor Information(_Total)\% Processor Time" -MaxSamples 3).CounterSamples | Measure-Object CookedValue -Max).Maximum
Start-Sleep 5
}
这将为您提供 Hyper-V 主机上的主机和客户机 CPU 使用率。