CPU- und RAM-Verbrauch von VMs anzeigen mit PowerShell und Perfmon

    Perfmon alias LeistungsüberwachungDa sich mehrere virtuelle Maschinen die Res­sourcen eines Hosts teilen, ist es wichtig zu wissen, wie viel RAM und Rechenzeit sie tat­säch­lich ver­brauchen. Dies hilft bei der Konfi­guration von VMs und der Per­formance-Analyse. Power­Shell 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 Netzwerk­bandbreite 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.

    Der Hyper-V Manager bietet ein paar Basisinformationen zum Ressourcen-Verbrauch von VMs.

    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.

    Der Veeam Task Manager ist ein einfaches Tool, das kaum mehr Infos liefert 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 weiterzu­verarbeiten. 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.

    Auswahl der Indikatoren in Perfmon für die genutzte Rechenleistung von VMs.

    Die durch virtuelle Maschinen beanspruchte Rechenzeit lässt sich unter Hyper-V - Virtueller Prozessor des Hypervisors mit Gastaus­fü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.

    Anzeige für Verbrauch von physischem RAM durch virtuelle Maschinen.

    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.

    Keine Kommentare