Bestimmen der E / A-Ausführung einer VM auf einem Hyper-V-Host


13

Wie finde ich heraus, welche VM für den Großteil der mit Hyper-V angezeigten E / A verantwortlich ist?

Die Situation: Ich habe Hyper-V-Hosts mit einer Reihe von VMs (ca. 30 pro Host), auf denen gelegentlich längere Zeiträume mit hoher Festplattenauslastung auftreten. Ich würde gerne wissen, welche VM dies verursacht.

Ich habe versucht, Process Explorer zu verwenden, aber es wurden alle Hyper-V-bezogenen E / A-Vorgänge gemeldet, die vom "System" -Prozess verarbeitet werden sollen.

Process Explorer

Es wäre schon hilfreich, eine Aufschlüsselung nach zugegriffenen Dateien vorzunehmen. Die vollständige GUI-Installation von Windows Server enthält den Ressourcenmonitor , der diese Informationen bereitstellt. Resmon scheint jedoch in Core- und Hyper-V-Installationen nicht verfügbar zu sein.


@RyanRies Nein, ich sehe vmwp.exe in keinem der E / A-Vorgänge. Da ich nicht weiß, auf welche Festplatten geladen werden soll, kann ich nicht sagen, ob die IDE oder der SCSI-Codepfad verwendet wird. Beides scheint gleichermaßen möglich zu sein.
the-wabbit

Antworten:


9

Öffnen Sie den Systemmonitor (als Administrator ausführen) auf Ihrer lokalen Arbeitsstation. Leistungsindikator hinzufügen, Leistungsindikatoren auf dem Hyper-V-Computer, dem virtuellen Hyper-V-IDE-Controller oder dem virtuellen Hyper-V-Speichergerät auswählen, Leistungsindikatoren und Instanzen (VMs) nach Bedarf auswählen. Möglicherweise müssen Sie ein wenig herumfischen, um die für Sie am sinnvollsten geeignete Theke zu finden.

Es gibt einige gute Hinweise, nach welchen Indikatoren bei der Überwachung der Hyper-V-Leistung gesucht werden muss


Mmh, das habe ich versucht. Es ergab keine nützlichen Ergebnisse und ich habe keine Ahnung, warum dies so ist. Zuerst hatte ich Probleme beim Auffinden der Zähler für virtuelle Speichergeräte - es scheint, dass sie auf meinen Installationen nicht vorhanden sind. Da die meisten meiner Festplatten IDE sind, habe ich den Virtual IDE Controller getestet, aber aus unerfindlichen Gründen werden nur Nullen für die Instanz zurückgegeben, die tatsächlich die Last verursacht hat (auf die ich in der Zwischenzeit aus Versehen gestoßen bin) - während andere Instanzen scheinen vernünftige Werte hervorzubringen.
the-wabbit

2
Wenn Sie das VM-Integrationsmaterial installiert haben, verwenden Sie keine IDE (unabhängig davon, was auf dem Konfigurationsbildschirm angezeigt wird; machen Sie mich nicht mit den schlechten Konfigurationsbildschirmoptionen von MS vertraut). Daher müssen Sie die Virt Stor Dev-Zähler verwenden. Letztere sind pro VHD und nicht pro VM, sodass ein wenig Dereferenzierung erforderlich ist.
Chris S

Das klärt es auf. Ich habe endlich das virtuelle Speichergerät gefunden, es scheint vernünftige Werte für die virtuellen Festplatten zurückzugeben.
the-wabbit

Chris S ist richtig. Der genaue Name des Leistungsindikators, auf den er verweist, lautet "Hyper-V Virtual Storage Device". Das heißt, die "Warteschlangenlänge" in dieser Kategorie gibt einen guten Einblick, welche Ihrer VHD (X) -Dateien die höchste Latenz bei der Kommunikation mit Ihrer Festplatte aufweist.
Koen Zomers

2

Syneticon-dj, ich habe heute Nachmittag etwas für dich geschrieben. Ich fand dieses Problem interessant, daher gibt Ihnen dieses einfache Skript die Lese- und Schreib-E / A-Statistiken für jede ausgeführte VM auf dem Hyper-V-Host. Als zusätzlichen Bonus ordnet er jede VM der Prozess-ID seiner vmwp.exe zu.

Sie können dies auf Ihrem Hyper-V-Server ausführen, da keine grafische Benutzeroberfläche erforderlich ist.

Der Nachteil ist, dass ich während der Arbeit bemerkte, dass die Leistungsindikatoren für eine Weile großartig funktionierten, und dann entschieden sie sich ohne erkennbaren Grund, alle auf Null zu bleiben. Naja, vielleicht ist es kein Fehler, wie Chris S sagt ... aber diese Zähler könnten leider doch nicht sehr nützlich sein. Unabhängig davon ist es sehr einfach, das Skript für die Verwendung von Virt zu ändern. Stattdessen Speichergerätezähler.

Die Ausgabe sieht folgendermaßen aus:

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

    }
}

Das ist kein Fehler, siehe Kommentare in meiner Antwort.
Chris S

Dann frage ich mich, warum die Zähler zeitweise zu arbeiten scheinen? (Windows-Gäste mit vollständigen Integrationsdiensten.) Und warum sollten sie stattdessen die wesentlich weniger nützliche Abstraktionsstufe für VHD-Zähler wählen? :(
Ryan Ries

Ich bin mir nicht sicher, warum es zeitweise etwas zeigen würde. Wie auch immer, so funktioniert der Speicher in Hyper-V. Grundsätzlich gibt es nur einen Speichercontroller für alle VMs. Wenn Sie in der Konfiguration einen "IDE-Controller" verwenden, aktivieren Sie nur die IDE-Emulation für den Speicher, der für diese VM verfügbar ist (im Gegensatz zum "SCSI-Controller", der nichts mit SCSI zu tun hat, und deaktivieren lediglich jede Art von Speichercontroller-Emulation). . VMs, die Integration Services unterstützen, überspringen einfach die IDE-Emulation. Die Speichercontrollerzähler kümmern sich nicht genau darum, welche VM an die einzelnen VHDs angeschlossen ist, daher auch die Funktionsweise.
Chris S

Genial. Danke für die Information. Ich bin sehr daran interessiert, mehr darüber zu lesen, aber es fällt mir schwer, eine gute technische Dokumentation zu finden. Ich denke, es wäre für MS unumgänglich, eine Menge dieser Dinge für uns zu entmystifizieren. Wir könnten mehr Vertrauen in ihre Lösungen setzen. Ich möchte nur ein Hyper-V Internals- Buch. Ist das zuviel verlangt? :)
Ryan Ries

1

Beide anderen Antworten sind nützlich. Aber ich finde, dass ich das, wonach Sie suchen, viel einfacher bekomme (wenn die VHDs auf lokalen oder lokal freigegebenen Festplatten anstatt auf einem Dateiserver gespeichert sind), indem ich "Resource Monitor" öffne und auf die Registerkarte "Festplatte" schaue. Sehen Sie sich "Festplattenaktivität" an und sortieren Sie nach "Gesamt (B / s)". Sie sehen die VHDs in der Reihenfolge ihrer Aktivität.

Offensichtlich ist meine Strategie eine lose Annäherung an Maschinen, bei denen Sie lokal angemeldet sind, was sie in einer großen, kopflosen Umgebung weniger nützlich macht.


1
Jake, danke, dass du dir die Zeit genommen hast zu antworten. Ich würde wirklich lieben , nur Blick auf die Ressourcenmonitor, ist es jedoch nicht verfügbar , wenn der Server nicht eine vollständige grafische ausgeführt wird installieren , sondern nur die Hyper-V - Edition oder Server Core. Welches ist, was ich habe.
the-wabbit

1

Ich habe ein PowerShell-GUI-Tool geschrieben, mit dem Guest-Leistungsdaten für alle auf ausgewählten Hyper-V-Hosts gefundenen VMs erfasst werden. Das Sammeln und Abgleichen von Daten erfolgt mit Get-Counter- und Hyper-V-WMI-Informationen. Ausführen von einem Mitgliedsserver, keine Module erforderlich. Ich hoffe, dies hilft bei der schnellen Behebung von Leistungsproblemen auf Hyper-V-Hosts und VMs.

Zeigen Sie die Gastleistungsstatistik der virtuellen Hyper-V-Maschine (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54 an


0

Möglicherweise möchten Sie ein Tool eines Drittanbieters ausprobieren, mit dessen Hilfe Sie virtuelle Maschinen ermitteln können, die hohe E / A-Werte verursachen, und bei solchen hohen E / A-Werten einen Alarm auslösen können. Sie können es hier überprüfen - ApexSQL VM Monitor .

Dieses Tool kann eine große Anzahl von Datenträgerindikatoren für Hosts und virtuelle Maschinen überwachen. Neben vordefinierten Indikatoren kann es so eingerichtet werden, dass Leistungsindikatoren vom Systemmonitor überwacht und grafisch dargestellt werden.

Hoffe ich habe geholfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.