Determinazione della VM che esegue I / O su un host Hyper-V


13

Come faccio a sapere quale VM è responsabile della maggior parte degli I / OI visualizzati con Hyper-V?

La situazione: ho host Hyper-V con un numero di VM (circa 30 per host) dove ogni tanto vedo periodi prolungati di utilizzo elevato del disco. Vorrei sapere quale VM sta causando questo.

Ho provato a utilizzare Process Explorer, ma ha segnalato che tutti gli I / O relativi a Hyper-V sono gestiti dal processo "Sistema", quindi nessun aiuto in questo caso:

esploratore di processo

Sarebbe già utile avere una suddivisione in base ai file a cui si accede. L'installazione GUI completa di Windows Server ha il monitor risorse che fornisce queste informazioni. Tuttavia, Resmon sembra non essere disponibile nelle installazioni Core e Hyper-V.


@RyanRies no, non vedo vmwp.exe coinvolto in nessuno degli I / O. Dato che non so a quali dischi andrà il carico, non so dire se sta prendendo l'IDE o il percorso del codice SCSI, entrambi sembrano ugualmente possibili.
the-wabbit,

Risposte:


9

Apri Performance Monitor (esegui come amministratore) sulla workstation locale. Aggiungi contatore, seleziona contatori dalla macchina hyper-v, Controller IDE virtuale Hyper-V o Dispositivo di archiviazione virtuale Hyper-V, seleziona contatori ed istanze (VM) come sembra appropriato. Potrebbe essere necessario pescare un po 'in giro per trovare il contatore che ha più senso per te.

Ci sono alcuni buoni suggerimenti su quali contatori cercare nel monitoraggio delle prestazioni di Hyper-V


Mmh, ci ho provato. Non ha prodotto risultati utili e non ho idea del perché sia ​​così. Inizialmente, ho avuto problemi a localizzare i contatori del dispositivo di archiviazione virtuale - sembra che non siano presenti nelle mie installazioni. Dato che la maggior parte dei miei dischi sono IDE, ho dato una possibilità al controller IDE virtuale, ma per alcuni motivi insondabili non sta restituendo altro che zeri per l'istanza che causa effettivamente il carico (che nel frattempo mi sono imbattuto per caso) - mentre altri casi sembra produrre valori sani.
the-wabbit

2
Se hai installato roba Integrazione VM, non stai usando IDE (indipendentemente da ciò che dice la schermata di configurazione; non farmi iniziare con le scarse scelte della schermata di configurazione di MS), quindi devi usare i contatori Dev Virt Stor. Questi ultimi sono per VHD, non per VM, quindi c'è un po 'di dereferenziazione.
Chris S,

Questo chiarisce. Ho finalmente trovato il dispositivo di archiviazione virtuale, sembra restituire valori sani per i dischi virtuali.
the-wabbit,

Chris S ha ragione. Il nome esatto del contatore del monitor delle prestazioni a cui fa riferimento è "Dispositivo di archiviazione virtuale Hyper-V". Vale a dire la "Lunghezza della coda" in questa categoria offre una buona idea di quale dei tuoi file VHD (X) sta avendo la maggior latenza di comunicare con il tuo disco.
Koen Zomers,

2

Syneticon-dj, ho scritto qualcosa per te questo pomeriggio. Ho pensato che questo problema fosse interessante, quindi questo semplice script ti fornirà le statistiche IO di lettura e scrittura su ogni VM in esecuzione sull'host Hyper-V. Come bonus aggiuntivo associa ogni VM all'ID processo del suo vmwp.exe.

Puoi eseguirlo sul tuo server Hyper-V, perché non ha bisogno di una GUI.

Il rovescio della medaglia è che mentre stavo lavorando su questo, ho notato che i contatori delle prestazioni funzionavano alla grande per un po ', e quindi, per nessuna ragione evidente, hanno deciso di rimanere tutti a zero. Beh, forse non è un bug, come dice Chris S ... ma questi contatori potrebbero purtroppo non essere molto utili dopo tutto. Indipendentemente da ciò, sarebbe molto facile modificare lo script per usare la Virt. Contatori dispositivo di archiviazione invece.

L'output è simile al seguente:

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

    }
}

Non è un bug, vedi i commenti nella mia risposta.
Chris S,

Quindi mi chiedo perché i contatori sembrano funzionare a intermittenza? (Ospite di Windows con servizi di integrazione completa). Perché scegliere invece il livello di astrazione significativamente meno utile dei contatori per VHD? :(
Ryan Ries,

Non sono sicuro del perché mostrerebbe qualcosa in modo intermittente. Per questo motivo, è il modo in cui funziona l'archiviazione in Hyper-V. Essenzialmente esiste un solo controller di archiviazione per tutte le macchine virtuali. Usando un "Controller IDE" nella configurazione si sta semplicemente abilitando l'emulazione IDE per l'archiviazione esposta a quella VM (al contrario del "Controller SCSI" che non ha nulla a che fare con SCSI e disabilita qualsiasi tipo di emulazione del controller di archiviazione) . Le macchine virtuali che supportano Integration Services semplicemente saltano l'emulazione IDE. Ai contatori del controller di archiviazione non importa esattamente quale VM è collegata a ciascun disco rigido virtuale, quindi il modo in cui funziona.
Chris S,

Eccezionale. Grazie per le informazioni. Sono estremamente interessato a leggere di più su questo, ma sto facendo fatica a trovare una buona documentazione tecnica. Penso che sarebbe opportuno per MS demistificare molte cose per noi. Saremo in grado di riporre maggiore fiducia nelle loro soluzioni. Voglio solo un libro su Hyper-V Internals . È chiedere troppo? :)
Ryan Ries,

1

Entrambe le altre risposte sono utili. Ma trovo che ottengo ciò che stai cercando molto più facilmente (quando i dischi rigidi virtuali sono archiviati su dischi condivisi localmente o localmente anziché su un file server) aprendo "Resource Monitor" e guardando la scheda Disco. Guarda "Attività disco" e ordina per "Totale (B / sec)". Vedrai i dischi rigidi virtuali elencati in ordine di attività.

Ovviamente la mia strategia è un'approssimazione libera per le macchine a cui sei connesso localmente, il che la rende meno utile in un ambiente grande e senza testa.


1
Jake, grazie per aver dedicato del tempo per rispondere. Mi piacerebbe davvero piace a basta guardare il monitor risorse, tuttavia, non è disponibile quando il server non è in esecuzione un grafica installazione completa, ma solo l'edizione Hyper-V o Server Core. Qual è quello che ho.
the-wabbit

1

Ho scritto uno strumento GUI di PowerShell raccogliendo i dati sulle prestazioni degli ospiti per tutte le macchine virtuali trovate su host Hyper-V selezionati. La raccolta e la corrispondenza dei dati vengono eseguite con le informazioni get-counter e Hyper-V WMI. Esegui da qualsiasi server membro, nessun modulo richiesto. Spero che questo possa aiutare a risolvere rapidamente i problemi di prestazioni su host Hyper-V e VM.

Mostra le statistiche sulle prestazioni dei guest della macchina virtuale Hyper-V (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54


0

Potresti voler provare uno strumento di terze parti che può aiutarti a rilevare la macchina virtuale che sta causando I / O elevati e ha anche la possibilità di avvisare su tali I / O elevati. Puoi verificarlo qui - ApexSQL VM Monitor .

Questo strumento è in grado di monitorare grandi spettri di contatori di dischi per host e macchine virtuali e, oltre ai contatori predefiniti, può essere impostato per monitorare e mostrare la presentazione grafica dei contatori da Performance Monitor.

Spero di averti aiutato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.