如何找出哪个虚拟机负责 Hyper-V 中的大部分 I/OI?
情况:我确实有 Hyper-V 主机,其中有许多虚拟机(每个主机大约 30 个),我偶尔会看到长时间的高磁盘利用率。我想知道哪个虚拟机导致了这种情况。
我尝试使用 Process Explorer,但它报告所有 Hyper-V 相关的 I/O 都由“系统”进程处理,因此没有帮助:
按访问的文件进行细分已经很有帮助了。Windows Server 的完整 GUI 安装具有资源监控提供此信息。但是,Resmon 似乎在 Core 和 Hyper-V 安装中不可用。
答案1
在本地工作站上打开性能监视器(以管理员身份运行)。添加计数器,从 hyper-v 计算机、Hyper-V 虚拟 IDE 控制器或 Hyper-V 虚拟存储设备中选择计数器,根据需要选择计数器和实例(VM)。您可能需要四处寻找才能找到对您最有意义的计数器。
有一些很好的提示,可以告诉你应该寻找哪些计数器监控 Hyper-V 性能
答案2
Syneticon-dj,我今天下午为你写了一些东西。我觉得这个问题很有趣,所以这个简单的脚本将为你提供 Hyper-V 主机上每个正在运行的虚拟机的读写 IO 统计数据。作为额外的好处,它将每个虚拟机与其 vmwp.exe 的进程 ID 关联起来。
您可以在 Hyper-V 服务器上运行它,因为它不需要 GUI。
缺点是,在我处理这个问题时,我注意到性能计数器在一段时间内运行良好,然后不知何故它们全部停留在零上。好吧,也许这不是一个错误,就像 Chris S 说的……但不幸的是,这些计数器可能毕竟不是很有用。无论如何,修改脚本以使用 Virt. Storage Device 计数器将非常容易。
输出如下所示:
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); }
}
}
}
答案3
其他两个答案都很有用。但我发现,通过打开“资源监视器”并查看“磁盘”选项卡,我可以更轻松地找到您要查找的内容(当 VHD 存储在本地或本地共享磁盘而不是文件服务器上时)。查看“磁盘活动”并按“总计(B/秒)”排序。您将看到按活动顺序列出的 VHD。
显然,我的策略是对您本地登录的机器进行松散的近似,这使得它在大型无头环境中不太有用。
答案4
您可能想尝试第三方工具,它可以帮助检测导致高 I/O 的虚拟机,并且还能够对此类高 I/O 发出警报。您可以在此处查看 -ApexSQL VM 监控器。
该工具可以监控主机和虚拟机的大量磁盘计数器,除了预定义的计数器外,还可以设置为监控并显示性能监视器中计数器的图形表示。
希望我能帮上忙。