So verwenden Sie den vmstat-Befehl unter Linux

Ihr Linux- oder macOS-System nutzt virtuellen Speicher. Erfahren Sie, wie sich dies auf die Auslastung von physischem Speicher, CPU und Festplattenressourcen Ihres Systems auswirkt.

Was genau ist virtueller Speicher?

Ihr Computer verfügt über eine begrenzte Menge an physischem Speicher, bekannt als Arbeitsspeicher (RAM). Dieser RAM muss vom Kernel verwaltet und zwischen dem Betriebssystem und allen aktiven Anwendungen aufgeteilt werden. Was passiert jedoch, wenn der kombinierte Speicherbedarf die Kapazität des physischen RAMs überschreitet?

Linux- und Unix-basierte Betriebssysteme wie macOS können Speicherplatz auf der Festplatte verwenden, um den Speicherbedarf zu decken. Ein reservierter Bereich auf der Festplatte, auch „Swap-Speicher“ genannt, fungiert dabei als Erweiterung des RAM. Dies ist der virtuelle Speicher.

Der Linux-Kernel kann den Inhalt eines Speicherblocks in den Swap-Bereich verschieben und diesen RAM-Bereich für einen anderen Prozess freigeben. Die ausgelagerten Daten können bei Bedarf aus dem Swap-Bereich zurück in den RAM geladen werden.

Natürlich ist der Zugriff auf ausgelagerten Speicher langsamer als der Zugriff auf Daten im RAM. Und das ist nicht der einzige Nachteil. Während der virtuelle Speicher Linux eine Möglichkeit bietet, den Speicherbedarf zu managen, verursacht seine Nutzung eine zusätzliche Belastung für andere Systemkomponenten.

Ihre Festplatte muss mehr Lese- und Schreibvorgänge durchführen. Der Kernel und damit die CPU müssen mehr Arbeit leisten, da sie ständig Speicher aus- und einlagern und die Festplatte in Betrieb halten, um den Speicherbedarf der verschiedenen Prozesse zu decken.

Linux bietet Ihnen die Möglichkeit, all diese Aktivitäten mithilfe des Befehls vmstat zu verfolgen, der Informationen über virtuelle Speicherstatistiken liefert.

Der Befehl vmstat

Wenn Sie den Befehl vmstat ohne Parameter ausführen, wird eine Reihe von Werten angezeigt. Diese Werte stellen Durchschnittswerte für jede Statistik seit dem letzten Systemstart dar und geben keine Momentaufnahme der aktuellen Situation wieder.

vmstat

Es wird eine Tabelle mit Werten dargestellt.

Die Spalten tragen die Überschriften Procs, Memory, Swap, IO, System und CPU. Die letzte Spalte (ganz rechts) enthält die CPU-Daten.

Hier eine Erläuterung der Datenelemente in jeder Spalte:

Prozess (Procs)

r: Die Anzahl der ausführbaren Prozesse. Dies sind Prozesse, die gestartet wurden und entweder aktiv sind oder auf ihre nächste CPU-Zeitscheibe warten.

b: Die Anzahl der Prozesse im unterbrechungsfreien Schlafzustand. Dieser Zustand bedeutet nicht, dass der Prozess schläft, sondern dass er einen blockierenden Systemaufruf ausführt und erst nach Abschluss der aktuellen Aktion unterbrochen werden kann. Oft handelt es sich um Gerätetreiber, die auf die Freigabe einer Ressource warten. Ausstehende Interrupts für diesen Prozess werden bei der Wiederaufnahme der normalen Aktivität abgearbeitet.

Speicher (Memory)

swpd: Der Umfang des genutzten virtuellen Speichers. Dies gibt an, wie viel Speicher ausgelagert wurde.

free: Der Umfang des ungenutzten (momentan nicht verwendeten) Speichers.

buff: Der Umfang des als Puffer verwendeten Speichers.

cache: Der Umfang des als Cache genutzten Speichers.

Swap

si: Die Menge des virtuellen Speichers, die aus dem Swap-Bereich in den RAM geholt wurde.

so: Die Menge des virtuellen Speichers, die aus dem RAM in den Swap-Bereich ausgelagert wurde.

Eingabe/Ausgabe (IO)

bi: Die Anzahl der von einem Blockgerät empfangenen Blöcke. Dies entspricht der Anzahl der Blöcke, die verwendet werden, um Daten aus dem Swap-Bereich wieder in den RAM zu laden.

bo: Die Anzahl der an ein Blockgerät gesendeten Blöcke. Dies entspricht der Anzahl der Blöcke, die verwendet werden, um Daten aus dem RAM in den Swap-Bereich auszulagern.

System

in: Die Anzahl der Interrupts pro Sekunde, einschließlich des Systemtaktes.

cs: Die Anzahl der Kontextwechsel pro Sekunde. Ein Kontextwechsel tritt auf, wenn der Kernel von der Verarbeitung im Systemmodus zur Verarbeitung im Benutzermodus wechselt.

CPU

Die folgenden Werte sind alle Prozentsätze der gesamten CPU-Zeit:

us: Zeit, die für die Ausführung von Nicht-Kernel-Code verwendet wird. Das bedeutet, wie viel Zeit für die Verarbeitung von Benutzer- und Nice-Prozessen aufgewendet wird.

sy: Zeit, die für die Ausführung von Kernel-Code verwendet wird.

id: Zeit, in der die CPU im Leerlauf verbracht hat.

wa: Wartezeit auf Eingabe- oder Ausgabevorgänge.

st: Zeit, die von einer virtuellen Maschine gestohlen wird. Dies ist die Zeit, die eine virtuelle Maschine warten muss, bis der Hypervisor die Wartung anderer virtueller Maschinen abgeschlossen hat, bevor er sich dieser virtuellen Maschine wieder zuwenden kann.

Verwendung eines Zeitintervalls

Wir können vmstat anweisen, die Zahlen regelmäßig zu aktualisieren, indem wir eine Verzögerungszeit angeben. Die Verzögerung wird in Sekunden angegeben. Um die Statistiken alle fünf Sekunden zu aktualisieren, verwenden wir den folgenden Befehl:

vmstat 5

Alle fünf Sekunden fügt vmstat der Tabelle eine weitere Datenzeile hinzu. Um den Vorgang zu beenden, drücken Sie Strg+C.

Verwendung eines Zählwerts

Wenn Sie einen sehr kleinen Verzögerungswert verwenden, kann dies Ihr System zusätzlich belasten. Wenn Sie schnelle Aktualisierungen zur Problembehebung benötigen, ist es ratsam, sowohl einen Zähl- als auch einen Verzögerungswert zu verwenden.

Der Zählwert gibt vmstat an, wie viele Aktualisierungen durchgeführt werden sollen, bevor das Programm beendet wird und zur Eingabeaufforderung zurückkehrt. Ohne einen Zählwert läuft vmstat bis zum Abbruch mit Strg+C.

Um vmstat anzuweisen, alle fünf Sekunden eine Aktualisierung durchzuführen und dies nur viermal, verwenden Sie den folgenden Befehl:

vmstat 5 4

Nach vier Aktualisierungen beendet sich vmstat automatisch.

Ändern der Einheiten

Sie können die Anzeige der Speicher- und Swap-Statistiken in Kilobyte oder Megabyte ändern, indem Sie die Option -S (Einheitenzeichen) zusammen mit k, K, m oder M verwenden, welche folgendes bedeuten:

k: 1000 Byte

K: 1024 Byte

m: 1000000 Byte

M: 1048576 Byte

Verwenden Sie den folgenden Befehl, um die Statistiken alle 10 Sekunden mit Speicher- und Swap-Werten in Megabyte anzuzeigen:

vmstat 10 -S M

Die Speicher- und Swap-Statistiken werden nun in Megabyte angezeigt. Beachten Sie, dass die Option -S keinen Einfluss auf die IO-Blockstatistik hat, welche immer in Blöcken angezeigt wird.

Aktiver und inaktiver Speicher

Wenn Sie die Option -a (aktiv) verwenden, werden die Spalten buff und cache durch die Spalten inact und active ersetzt. Diese zeigen, wie der Name schon sagt, die Menge an inaktivem und aktivem Speicher.

Um diese beiden Spalten anstelle der buff– und cache-Spalten anzuzeigen, fügen Sie die Option -a wie folgt ein:

vmstat 5 -a -S M

Die Spalten für inaktiven und aktiven Speicher werden von der Option -S (Einheitszeichen) beeinflusst.

Forks

Der Schalter -f zeigt die Anzahl der Forks an, die seit dem Hochfahren des Computers stattgefunden haben.

Anders ausgedrückt, dies zeigt die Anzahl der Aufgaben, die seit dem Systemstart gestartet und (meistens) wieder beendet wurden. Jeder über die Befehlszeile gestartete Prozess würde diese Zahl erhöhen. Jedes Mal, wenn eine Aufgabe oder ein Prozess eine neue Aufgabe erzeugt oder klont, wird dieser Wert erhöht.

vmstat -f

Die Anzeige der Forks wird nicht aktualisiert.

Anzeigen von Slab-Informationen

Der Kernel muss seine eigene Speicherverwaltung sowie die Speicherverwaltung für das Betriebssystem und alle Anwendungen übernehmen.

Wie Sie sich vorstellen können, reserviert und verwendet der Kernel ständig Speicher für verschiedene Arten von Datenobjekten. Um dies effizienter zu gestalten, verwendet er ein System namens Slabs. Dies ist eine Form von Caching.

Speicher, der für einen bestimmten Typ von Kernel-Datenobjekt zugewiesen, verwendet und nicht mehr benötigt wird, kann für ein anderes Datenobjekt desselben Typs wiederverwendet werden, ohne dass der Speicher freigegeben und neu zugewiesen werden muss. Sie können sich Slabs als vorab zugewiesene, maßgeschneiderte RAM-Segmente für die Anforderungen des Kernels vorstellen.

Um die Slab-Statistiken anzuzeigen, verwenden Sie die Option -m (Slabs). Sie müssen dies mit sudo tun und werden zur Eingabe Ihres Passworts aufgefordert. Da die Ausgabe sehr umfangreich sein kann, leiten wir sie durch less.

sudo vmstat -m | less

Die Ausgabe besteht aus fünf Spalten:

Cache: Name des Caches.

num: Die Anzahl der derzeit aktiven Objekte in diesem Cache.

total: Die Gesamtzahl der verfügbaren Objekte in diesem Cache.

size: Die Größe jedes Objekts im Cache.

Seiten: Die Gesamtzahl der Speicherseiten, die (mindestens) ein Objekt umfassen, welches derzeit diesem Cache zugeordnet ist.

Drücken Sie q, um less zu beenden.

Anzeigen von Ereigniszählern und Speicherstatistiken

Um eine Seite mit Ereigniszählern und Speicherstatistiken anzuzeigen, verwenden Sie die Option -s (stats). Beachten Sie, dass dies ein kleines „s“ ist.

vmstat -s

Obwohl die gemeldeten Statistiken weitgehend mit den Informationen aus der Standardausgabe von vmstat übereinstimmen, sind einige davon detaillierter aufgeteilt.

Beispielsweise kombiniert die Standardausgabe die „nice“ und „nicht-nice“ CPU-Zeit des Benutzers in der Spalte us. Die Ausgabe von -s (stats) listet diese Statistiken separat auf.

Anzeigen von Festplattenstatistiken

Mit der Option -d (Datenträger) können Sie eine ähnliche Auflistung von Festplattenstatistiken abrufen.

vmstat -d | less

Für jede Festplatte werden drei Spalten angezeigt: Lesevorgänge, Schreibvorgänge und E/A.

Die Spalte „IO“ befindet sich ganz rechts. Beachten Sie, dass die Spalte „sec“ in „IO“ in Sekunden gemessen wird, während die zeitbasierten Statistiken in den Lese- und Schreibspalten in Millisekunden angegeben werden.

Das bedeuten die Spalten:

Lese-Operationen (Reads)

total: Die Gesamtzahl der Festplattenlesevorgänge.

merged: Die Gesamtzahl der zusammengefassten Lesevorgänge.

Sektoren: Die Gesamtzahl der gelesenen Sektoren.

ms: Die Gesamtzeit in Millisekunden, die zum Lesen von Daten von der Festplatte verwendet wurde.

Schreib-Operationen (Writes)

total: Die Gesamtzahl der Festplattenschreibvorgänge.

merged: Die Gesamtzahl der zusammengefassten Schreibvorgänge.

Sektoren: Die Gesamtzahl der geschriebenen Sektoren.

ms: Die Gesamtzeit in Millisekunden, die zum Schreiben von Daten auf die Festplatte verwendet wurde.

Eingabe/Ausgabe (IO)

cur: Die Anzahl der aktuellen Lese- oder Schreibvorgänge auf der Festplatte.

sec: Die Zeit in Sekunden für alle laufenden Lese- oder Schreibvorgänge.

Anzeigen der zusammenfassenden Festplattenstatistik

Verwenden Sie die Option -D (Datenträgersumme), um eine kurze Anzeige der zusammenfassenden Statistiken für Ihre Festplattenaktivität zu erhalten. Beachten Sie den Großbuchstaben „D“.

vmstat -D

Die Anzahl der angezeigten Festplatten kann ungewöhnlich hoch erscheinen. Auf dem Computer, auf dem dieser Artikel recherchiert wurde, läuft Ubuntu. Bei Ubuntu wird jedes Mal, wenn Sie eine Anwendung von Snap installieren, ein Squashfs-Pseudo-Dateisystem erstellt, das mit einem /dev/loop-Gerät verbunden ist.

Leider werden diese Geräteeinträge von vielen Linux-Befehlen und -Dienstprogrammen als Festplattengeräte gezählt.

Anzeigen der Partitionsstatistiken

Um Statistiken für eine bestimmte Partition anzuzeigen, verwenden Sie die Option -p (Partition) und geben die Partitionskennung als Befehlszeilenparameter an.

Hier betrachten wir die Partition sda1. Die Zahl eins gibt an, dass es sich um die erste Partition auf dem Gerät sda handelt, der Hauptfestplatte dieses Computers.

vmstat -p sda1

Die zurückgegebenen Informationen zeigen die Gesamtzahl der Festplattenlese- und Festplattenschreibvorgänge auf und von dieser Partition sowie die Anzahl der Sektoren, die in Lese- und Schreibaktionen auf der Festplatte enthalten sind.

Ein Blick unter die Haube

Es ist immer ratsam, Einblicke in die internen Abläufe zu gewinnen. Manchmal geht es darum, ein Problem zu beheben, und manchmal einfach aus Interesse, weil man wissen möchte, wie der Computer funktioniert.

vmstat kann Ihnen eine Menge nützlicher Informationen liefern. Nun wissen Sie, wie Sie auf diese zugreifen und was sie bedeuten. Und wer vorbereitet ist, ist gewappnet – wenn Sie die Ärmel hochkrempeln und eine Diagnose durchführen müssen, können Sie auf vmstat zählen.