Tags: Hyper-V, Monitoring, PowerShell
Da sich mehrere virtuelle Maschinen die Ressourcen eines Hosts teilen, ist es wichtig zu wissen, wie viel RAM und Rechenzeit sie tatsächlich verbrauchen. Dies hilft bei der Konfiguration von VMs und der Performance-Analyse. PowerShell und Perfmon liefern diese Daten.
Grundsätzlich wird man VMs mit nur so viel vCPUs und Arbeitsspeicher ausstatten, wie sie benötigen. Auch ihr Verbrauch an Netzwerkbandbreite lässt sich mit QoS beschränken. In der Praxis stellt sich dann aber beispielsweise die Frage, wie viel Prozent der gesamten Rechenleistung des Hosts auf eine VM während des Betriebs tatsächlich entfallen. Ähnliches gilt für das RAM, wenn man Dynamic Memory verwendet.
Anzeige im Hyper-V Manager
Einige grundlegende Daten liefert der Hyper-V Manager in der Übersicht Virtuelle Computer. Sie enthält Spalten mit Werten für CPU-Auslastung, Zugewiesener Speicher und Betriebszeit. Nachdem das Tool dafür ausgelegt ist, immer nur einzelne Hosts zu verwalten, erhält man keine Gesamtsicht, sondern muss jeden Server einzeln betrachten.
Das Gleiche gilt für den kostenlosen Task Manager von Veeam, der den Verbrauch von Rechenzeit und Arbeitsspeicher etwas hübscher und übersichtlicher präsentiert als der Hyper-V Manager.
Im Unterschied zum Microsoft-Tool schlüsselt er diese Angaben nicht nur nach VMs auf, sondern zeigt auch die Auslastung durch die Parent Partition und den Hypervisor. Außerdem erscheinen die Angaben für das RAM nicht in absoluten Zahlen, sondern in Prozent.
Auslastung mit PowerShell untersuchen
Möchte man in Scripts oder auf der Kommandozeile ermitteln, wie viel RAM und CPU-Zeit einzelne VMs beanspruchen, dann hilft das Cmdlet Get-VM weiter. Die von ihm zurückgegebenen Objekte vom Typ VirtualMachine enthalten dafür die Attribute CPUUsage und MemoryAssigned. Ein Aufruf könnte so aussehen:
Get-VM | ? state -eq "running" | select name, CPUUsage, @{Name = "RAM"; Expression = {$_.MemoryAssigned / 1MB}}
Die von Get-VM ermittelte Sammlung wird auf jene VMs eingeschränkt, die eingeschaltet sind (also den Status "running" aufweisen). Select-Object extrahiert anschließend die Attribute Name, CPUUsage und MemoryAssigned. Letzteres wird in Byte ausgegeben, so dass wir sie mit Hilfe einer Calculated Property in MB umrechnen.
PowerShell bietet darüber hinaus die Mittel, um die erfassten Werte weiterzuverarbeiten. Möchte man etwa wissen, wieviel RAM alle VMs zusammen belegen, dann könnte man das so machen:
Get-VM | ? state -eq "running" | % { $gesamt += $_.MemoryAssigned}; $gesamt / 1GB
Hier ist darauf zu achten, dass man die Variable $gesamt vor jedem Aufruf des obigen Befehl auf null setzt.
Auswertung mit der Leistungsüberwachung
Wenn man das Verhalten von VMs über einen längeren Zeitraum beobachten und dabei mehrere Hosts gleichzeitig im Auge behalten möchte, dann bietet sich der Einsatz von Perfmon (Leistungsüberwachung) an. Es bietet hunderte Indikatoren für alle möglichen Systemparameter an, weshalb es nicht so einfach ist, jene für die CPU- und RAM-Auslastung von VMs zu finden.
Die durch virtuelle Maschinen beanspruchte Rechenzeit lässt sich unter Hyper-V - Virtueller Prozessor des Hypervisors mit Gastausführungszeit überwachen. Die Angaben sind in Prozent, so dass sie sich einfach auf die y-Achse abbilden lassen, deren Werte von 0 bis 100 reichen.
Etwas komplizierter ist der Fall für den Arbeitsspeicher. Der entsprechende Indikator findet sich unter Dynamischer Hyper-V Arbeitsspeicher - virtuelle Computer und heißt Physischer Speicher. Die Angaben erfolgen hier in MB, wobei die grafische Darstellung verwirrend sein kann, wenn man das Tool automatisch skalieren lässt.
Dann könnte etwa der Graph für eine VM, die weniger als 1 GB benötigt, weit über dem einer VM liegen, die 2GB verbraucht, weil perfmon.exe die
erste mit einem Faktor von 0,1 und zweite mit 0,01 skaliert. Im Sinne einer guten Vergleichbarkeit wäre die manuelle Wahl eines einheitlichen Faktors von 0,01 besser.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Hyper-V Switch mit PowerShell erstellen, verwalten und löschen
- Praxisbeispiel für Action Cards: Alert bei geringem Speicherplatz an Microsoft Teams senden und von dort WAC starten
- Virtuelle Maschine vollständig mit PowerShell erstellen (am Beispiel von Azure Stack HCI)
- VirtualMetric im Test: Monitoring von Server, Datenbanken, Anwendungen und virtualisierten Umgebungen, Nachverfolgung von Änderungen
- Statt Mail-Alerts: Systemnachrichten über Webhooks an Microsoft Teams senden
Weitere Links