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


13

Como descubro qual VM é responsável pela maioria das E / Ss que 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 de disco. Gostaria de saber qual VM está causando isso.

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

explorador de processos

Já ajudaria a ter uma discriminação por arquivos acessados. A instalação completa da GUI do Windows Server possui o 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.


@RyanRies não, não vejo o vmwp.exe envolvido em nenhuma das E / S. Como não sei para quais discos a carga está indo, não sei dizer se está pegando o caminho do código IDE ou SCSI, ambos parecem igualmente possíveis.
the-wabbit

Respostas:


9

Abra o Monitor de desempenho (execute como administrador) na estação de trabalho local. Adicione contador, selecione contadores da máquina hyper-v, Controlador IDE Virtual Hyper-V ou Dispositivo de Armazenamento Virtual Hyper-V, selecione contadores e instâncias (VMs) conforme parecer apropriado. Talvez você precise pescar um pouco para encontrar o contador que faz mais sentido para você.

Há algumas dicas boas sobre quais contadores procurar no Monitoramento do desempenho do Hyper-V


Mmh, eu tentei isso. Não produziu resultados úteis e não tenho ideia do motivo. No começo, tive problemas para localizar os contadores do dispositivo de armazenamento virtual - parece que eles não estão presentes nas minhas instalações. Como a maioria dos meus discos é IDE, dei uma chance ao Virtual IDE Controller, mas por alguns motivos insondáveis, ele não está retornando nada além de zeros para a instância que realmente está causando a carga (na qual eu tropecei acidentalmente) - enquanto outras instâncias parecem produzir valores sãos.
the-wabbit

2
Se você tem o material de integração de VM instalado, não está usando o IDE (independentemente do que a tela de configuração diz; não me inicie nas más opções de tela de configuração do MS), então você deve usar os contadores Virt Stor Dev. Os últimos são por VHD, não por VM, portanto, há um pouco de desreferenciamento envolvido.
Chris S

Isso esclarece. Finalmente encontrei o dispositivo de armazenamento virtual, parece retornar valores sãos para os discos virtuais.
the-wabbit

Chris S está certo. O nome exato do contador do monitor de desempenho a que ele se refere é "Dispositivo de armazenamento virtual Hyper-V". Ou seja, o "Comprimento da fila" nesta categoria fornece uma boa visão sobre quais arquivos VHD (X) estão com maior latência na comunicação com seu disco.
Koen Zomers

2

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

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

A desvantagem é que, enquanto eu estava trabalhando nisso, notei que os contadores de desempenho estavam funcionando muito bem por um tempo e, então, por nenhuma razão discernível, eles decidiram ficar 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 o Virt. Contadores de dispositivos de armazenamento.

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

    }
}

Isso não é um bug, veja os comentários na minha resposta.
Chris S

Então me pergunto por que os contadores parecem funcionar intermitentemente? (Convidados do Windows com serviços de integração completos.) E por que eles escolheriam o nível de abstração significativamente menos útil dos contadores por VHD? :(
Ryan Ries

Não sei por que isso mostraria algo intermitentemente. Quanto ao motivo, é assim que o armazenamento funciona no Hyper-V. Essencialmente, existe apenas um controlador de armazenamento para todas as VMs. Ao usar um "Controlador IDE" na configuração, você está apenas ativando a Emulação IDE para o armazenamento exposto a essa VM (em oposição ao "Controlador SCSI" que não tem nada a ver com o SCSI e apenas desabilita qualquer tipo de emulação do controlador de armazenamento) . As VMs que oferecem suporte ao Integration Services apenas ignoram a emulação do IDE. Os contadores do controlador de armazenamento não se importam exatamente com a VM conectada a cada VHD, daí a maneira como ela funciona.
Chris S

Impressionante. Obrigado pela informação. Estou extremamente interessado em ler mais sobre isso, mas estou tendo dificuldades para encontrar qualquer boa documentação técnica. Eu acho que caberia à MS desmistificar muitas dessas coisas para nós. Poderíamos confiar mais nas soluções deles. Eu só quero um livro do Hyper-V Internals . Isso é pedir muito? :)
Ryan Ries

1

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

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


1
Jake, obrigado por reservar um tempo para responder. Eu realmente amo a olhar apenas para o monitor de recursos, no entanto, não está disponível quando o servidor não está executando uma gráfica instalação completa, mas apenas a edição Hyper-V ou Server Core. Qual é o que eu tenho.
the-wabbit

1

Eu escrevi uma ferramenta da 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 informações do contador e do Hyper-V WMI. Execute a partir de qualquer servidor membro, sem a necessidade de módulos. Espero que isso ajude na solução rápida de problemas de desempenho em hosts Hyper-V e VMs.

Mostrar estatísticas de desempenho do convidado da máquina virtual Hyper-V (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54


0

Você pode tentar uma ferramenta de terceiros que pode ajudar na detecção de máquina virtual que está causando alta E / S e também tem a capacidade de alertar sobre essas E / Ss altas. Você pode conferir aqui - ApexSQL VM Monitor .

Essa ferramenta pode monitorar grandes espectros de contadores de disco para host e máquina virtual e, além dos contadores predefinidos, pode ser configurada para monitorar e mostrar a apresentação gráfica dos contadores no Monitor de desempenho.

Espero ter ajudado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.