确定在Hyper-V主机上执行I / O的VM

如何查找哪个VM负责大部分I / OI使用Hyper-V查看?

情况:我的Hyper-V主机有很多虚拟机(每个主机大概有30个虚拟机),偶尔会看到长时间的高磁盘利用率。 我想知道哪个虚拟机造成这种情况。

我尝试使用Process Explorer,但它报告所有Hyper-V相关的I / O由“系统”进程处理,所以没有帮助:

进程浏览器

它已经将有助于按访问的文件分解。 Windows Server的完整GUI安装具有提供此信息的资源监视器 。 但是,Resmon似乎在Core和Hyper-V安装中不可用。

    在本地工作站上打开性能监视器(以pipe理员身份运行)。 添加计数器,从hyper-v计算机,Hyper-V虚拟IDE控制器或Hyper-V虚拟存储设备中select计数器,select合适的计数器和实例(VM)。 你可能不得不周来钓鱼find最适合你的柜台。

    对于要监视Hyper-V性能的计数器有一些很好的提示

    Syneticon-dj,今天下午我为你写了一些东西。 我认为这个问题很有趣,所以这个简单的脚本会给你Hyper-V主机上每个正在运行的虚拟机的读写IO统计信息。 作为一个额外的好处,它将每个虚拟机关联到它的vmwp.exe的进程ID。

    你可以在你的Hyper-V服务器上运行它,因为它不需要GUI。

    不利的一面是,当我在做这件事的时候,我注意到演出台的效果很好,然后没有明显的原因他们决定全部保持零。 那么也许这不是一个错误,就像克里斯·S所说的……但是这些计数器可能不是很有用。 无论如何,修改脚本使用Virt将会非常容易。 存储设备计数器。

    输出如下所示:

    PID VMName ReadBytesPerSec WriteBytesPerSec --- ------ --------------- ---------------- 5108 DC02 483.90 0 2796 DC01 0 0 3348 ECA01 4782668.27 0 

     #Requires -Version 3 function Get-VMPidAndIO { <# .SYNOPSIS Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host. .DESCRIPTION Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host. Currently only works for VMs using virtual IDE controllers. Requires Powershell 3 at a minimum. .LINK http://myotherpcisacloud.com .NOTES Written by Ryan Ries, June 2013. [email protected] #> BEGIN { Try { $VMProcesses = Get-CimInstance -Query "Select ProcessId,CommandLine From Win32_Process Where Name ='vmwp.exe'" -ErrorAction Stop } Catch { Write-Error $_.Exception.Message Return } } PROCESS { } END { Foreach($_ In $VMProcesses) { $VMName = $((Get-VM | Where Id -EQ $_.CommandLine.Split(' ')[-1]).Name) [PSCustomObject]@{PID=$_.ProcessId; VMName=$VMName; ReadBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Read Bytes/sec").CounterSamples.CookedValue, 2); WriteBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Write Bytes/sec").CounterSamples.CookedValue, 2); } } } } 

    其他答案都是有用的。 但是,通过打开“资源监视器”并查看“磁盘”选项卡,我发现可以更容易地获得要查找的内容(当VHD存储在本地或本地共享磁盘上而不是文件服务器上时)。 查看“磁盘活动”并按“总计(B /秒)”sorting。 你会看到按他们的活动顺序列出的VHD。

    显然,我的策略是对你本地login的机器进行宽松的近似处理,这使得它在一个大的无头环境中不太有用。

    我编写了一个PowerShell GUI工具来收集所选Hyper-V主机上所有虚拟机的访客性能数据。 数据收集和匹配使用get-counter和Hyper-V WMI信息完成。 从任何成员服务器运行,不需要任何模块。 我希望这将有助于快速解决Hyper-V主机和虚拟机的性能问题。

    显示Hyper-V虚拟机来宾性能统计信息(PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54