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


13

我如何找出哪个VM负责Hyper-V的大部分I / O?

情况:我确实有带有多个VM的Hyper-V主机(每个主机约30个),偶尔会看到长时间的高磁盘利用率。我想知道是哪个VM引起了这个问题。

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

过程浏览器

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


@RyanRies不,我看不到vmwp.exe参与任何I / O。由于我不知道装入的磁盘,因此无法确定是否采用IDE或SCSI代码路径,两者似乎同样可行。
2013年

Answers:


9

在本地工作站上打开Performance Monitor(以Admin身份运行)。添加计数器,从hyper-v计算机,Hyper-V虚拟IDE控制器或Hyper-V虚拟存储设备中选择计数器,并根据需要选择计数器和实例(VM)。您可能需要四处钓鱼才能找到最适合您的柜台。

关于在监视Hyper-V性能中要寻找哪些计数器有一些很好的提示


嗯,我试过了。它没有产生有用的结果,我也不知道为什么会这样。最初,我在查找虚拟存储设备计数器时遇到了麻烦-好像它们在我的安装中不存在。由于我的大多数磁盘都是IDE,因此我给Virtual IDE Con​​troller做了一个尝试,但是出于某些不可思议的原因,它并没有为实际导致负载的实例返回零,而是返回零(与此同时,我偶然发现了该实例)-而其他实例似乎产生理智的价值。
the-wabbit

2
如果安装了VM Integration,那么您就不会使用IDE(无论配置屏幕上说什么;不要让我开始了解MS较差的配置屏幕选择),因此您必须使用Virt Stor Dev计数器。后者是每个VHD而非每个VM,因此涉及一些取消引用。
克里斯S

这样就清除了。我终于找到了虚拟存储设备,它似乎为虚拟磁盘返回了合理的值。
the-wabbit

克里斯·S是对的。他引用的性能监视器计数器的确切名称是“ Hyper-V虚拟存储设备”。即,该类别中的“队列长度”可以很好地了解哪个VHD(X)文件与磁盘进行通信的延迟最多。
Koen Zomers 2014年

2

Syneticon-dj,今天下午我为您写了一些东西。我认为这个问题很有趣,因此此简单脚本将为您提供Hyper-V主机上每个正在运行的VM上的读写IO统计信息。另外,它还将每个VM与其vmwp.exe的进程ID关联。

您可以在Hyper-V服务器上运行此程序,因为它不需要GUI。

不利的一面是,当我在进行此操作时,我注意到性能计数器在一段时间内运行良好,然后出于无可辩驳的原因,它们决定全部保持为零。好吧,也许不是像Chris 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.
    ryan@myotherpcisacloud.com
#>
    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); }
        }

    }
}

那不是错误,请参阅我的答案中的评论。
克里斯S

然后我想知道为什么柜台似乎间歇性地工作?(具有完整集成服务的Windows guest虚拟机。)为什么他们会选择每个VHD计数器的抽象级别大大降低了呢?:(
Ryan Ries

不知道为什么它会间歇性地显示任何内容。至于为什么,这就是存储在Hyper-V中的工作方式。本质上,所有虚拟机只有一个存储控制器。通过在配置中使用“ IDE控制器”,您只需为暴露给该VM的存储启用IDE仿真(与与SCSI无关的“ SCSI Controller”相对,并且仅禁用任何类型的存储控制器仿真) 。支持Integration Services的VM仅跳过IDE仿真。存储控制器计数器并不完全在乎每个VHD都连接了什么VM,因此它的工作方式也不同。
克里斯S

太棒了 谢谢(你的)信息。我对阅读有关此内容的内容非常感兴趣,但是我很难找到任何好的技术文档。我认为MS为我们揭开很多神秘的面纱是理所应当的。我们将对他们的解决方案充满信心。我只想要一本Hyper-V Internals书。那是过分的要求?:)
瑞安·里斯

1

其他两个答案都很有用。但是我发现,通过打开“资源监视器”并查看“磁盘”选项卡,可以轻松地找到所需的内容(当VHD存储在本地或本地共享磁盘而不是文件服务器上时)。查看“磁盘活动”,然后按“总计(B /秒)”排序。您会看到按活动顺序列出的VHD。

显然,我的策略是对您本地登录的计算机进行宽松的近似处理,这使其在大型无头环境中的用处不大。


1
杰克,谢谢您抽出宝贵的时间来回应。我真的很想看看资源监视器,但是,当服务器未运行完整的图形安装而仅运行Hyper-V版本或服务器核心时,它不可用。这就是我所拥有的。
the-wabbit

1

我编写了一个PowerShell GUI工具,以收集在选定的Hyper-V主机上找到的所有VM的来宾性能数据。数据收集和匹配是通过get-counter和Hyper-V WMI信息完成的。从任何成员服务器运行,不需要任何模块。我希望这将有助于快速排除Hyper-V主机和VM上的性能问题。

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


0

您可能想尝试一个第三方工具,该工具可以帮助检测引起高I / O的虚拟机,并且还能够对如此高的I / O发出警报。您可以在此处进行检查-ApexSQL VM Monitor

此工具可以监视主机和虚拟机的磁盘计数器的大量数据,并且可以在预定义计数器旁边进行设置,以监视和显示来自性能监视器的计数器的图形表示。

希望我能帮上忙。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.