Determinando a VM fazendo E / S em um host Hyper-V

13

Como descubro qual VM é responsável pela maioria das E / S que eu vejo com o Hyper-V?

A situação: Eu tenho hosts Hyper-V com um número de VMs (cerca de 30 por host) onde ocasionalmente vejo períodos prolongados de alta utilização do disco. Gostaria de saber qual VM está causando isso.

Eu tentei usar o Process Explorer, mas ele relatou que todas as E / S relacionadas ao Hyper-V são tratadas pelo processo "System", portanto não há ajuda:

Jáajudariaaterumdetalhamentoporarquivosacessados.AinstalaçãocompletadaGUIdoWindowsServertemo Monitor de Recursos que fornece essas informações. No entanto, o Resmon parece não estar disponível nas instalações Core e Hyper-V.

    
por the-wabbit 28.05.2013 / 13:46

5 respostas

9

Abra o Monitor de Desempenho (execute como Admin) em sua estação de trabalho local. Adicionar contador, selecionar contadores da máquina do hyper-v, Controlador IDE Virtual do Hyper-V ou Dispositivo de Armazenamento Virtual do Hyper-V, selecione contadores e instâncias (VMs) conforme apropriado. Você pode ter que pescar um pouco para encontrar o contador que faz mais sentido para você.

Há algumas boas dicas sobre quais contadores procurar em Monitorando o desempenho do Hyper-V

    
por 28.05.2013 / 15:25
2

Syneticon-dj, escrevi algo para você esta tarde. Achei que esse problema era interessante, portanto, esse script simples fornecerá as estatísticas de leitura e gravação do IO em cada VM em execução no host do Hyper-V. Como um bônus adicional, ele associa cada VM ao ID do processo do seu vmwp.exe.

Você pode executar isso no seu servidor Hyper-V, porque ele não precisa de uma GUI.

A desvantagem é que enquanto eu estava trabalhando nisso, percebi que os contadores de desempenho estavam funcionando muito bem por um tempo, e então, sem nenhuma razão aparente, eles decidiram ficar todos no zero. Bem, talvez não seja um bug, como Chris S diz ... mas esses contadores podem infelizmente não ser muito úteis, afinal. Independentemente disso, seria muito fácil modificar o script para usar a Virt. Contadores de dispositivos de armazenamento em vez disso.

A saída é assim:

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); }
        }

    }
}
    
por 02.06.2013 / 22:21
1

Ambas as outras respostas são úteis. Mas descubro que obtenho o que você está procurando com muito mais facilidade (quando os VHDs são armazenados em discos locais ou localmente compartilhados em vez de em um servidor de arquivos) abrindo o "Monitor de Recursos" e observando a guia Disco. Olhe para "Atividade de disco" e classifique por "Total (B / seg)". Você verá os VHDs listados em ordem de atividade.

Obviamente, minha estratégia é uma aproximação vaga para máquinas nas quais você faz login localmente, o que a torna menos útil em um ambiente grande e sem cabeça.

    
por 31.05.2013 / 18:57
1

Eu escrevi uma ferramenta GUI do PowerShell reunindo dados de desempenho do convidado para todas as VMs encontradas em hosts Hyper-V selecionados. A coleta e a correspondência de dados são feitas com as informações do get-counter e do Hyper-V WMI. Execute a partir de qualquer servidor membro, sem necessidade de módulos. Espero que isso ajude na solução rápida de problemas de desempenho em hosts e VMs do Hyper-V.

Mostrar estatísticas de desempenho de convidados da máquina virtual do Hyper-V (PowerShell) link

    
por 07.10.2015 / 14:27
0

Você pode experimentar uma ferramenta de terceiros que pode ajudar a detectar a máquina virtual que está causando alta E / S e também é capaz de alertar em E / S tão altas. Você pode conferir aqui - Monitor de VM ApexSQL .

Esta ferramenta pode monitorar o grande espectro de contadores de disco do host e da máquina virtual e, além dos contadores predefinidos, pode ser configurada para monitorar e mostrar a apresentação gráfica de contadores do Monitor de desempenho.

Espero ter ajudado.

    
por 26.03.2018 / 09:10