Aus Linux-Magazin 05/2012

Systemdiagnose von Vmstat über Netstat bis Dstat

© Serghei Velusceac, 123RF

Um zu beobachten, was auf einem Linux-System passiert, hat der Admin Vmstat, Iostat, Netstat und Ifstat in seinem Fundus. Oder er greift zum Alleskönner Dstat, der diese vier Tools in sich vereint.

Systemadministratoren nutzen meist mehrere Tools, um die Ressourcen-Auslastung eines Linux-Systems zu beobachten. Spätestens wenn es um das Auffinden von Engpässen geht, steigt aber der Aufwand: Einige Tools müssen über längere Zeiträume hinweg laufen und verbrauchen dabei selbst Ressourcen. Dieser Artikel stellt mit »vmstat« , »iostat« , »netstat« und »ifstat« vier Programme vor, die zur Grundausstattung des Admin gehören. Zum Abschluss präsentiert er das Vielzweck-Tool »dstat« , das viele Analysefunktionen in sich vereint.

Grundwissen

Wer Systemgrößen interpretieren möchte, muss sich zuvor klarmachen, was sie bedeuten. Dabei dreht sich vieles um den virtuellen Speicher. Während der physische Arbeitsspeicher in Form von RAM-Riegeln eine greifbare Größe ist, scheinen die Grenzen bei der Verwaltung des virtuellen Speichers zu verschwimmen. Die Speicherverwaltung des Betriebssystems ist selbst für manchen erfahrenen Linux-Anwender ein Rätsel.

Jeder Prozess unter Linux benötigt Arbeitsspeicher, um seine Aufgaben bewältigen zu können. Dafür alloziert das Betriebssystem Speicher, das heißt, es reserviert einen Bereich des Arbeitsspeichers von A bis B, den das Programm mit hoher Wahrscheinlichkeit zu einem späteren Zeitpunkt auch nutzt.

Da jedoch nicht jeder laufende Prozess all seinen zugewiesenen Speicher permanent benötigt, lagert der Kernel diesen Speicher in einer Einheit namens Speicherseite (Page) auf die Festplatte aus (Page-out). Damit steht dem System wieder mehr Platz im physischen RAM zur Verfügung. Wird der komplette vom Prozess reservierte Speicher auf die Festplatte geschrieben, so bezeichnet man dies als Swapping. Lagert der Kernel jedoch nur einzelne Speicherseiten des allozierten RAM auf die Platte aus, nennt man dies Paging.

Umgekehrt kann ein System den Speicher auch wieder in den RAM einlesen, das so genannte Page-in. Dieser Vorgang ist völlig normal und nicht unbedingt Anzeichen für Ressourcen-Engpässe. Das Paging auf die Platte kann aber bei Systemen mit hoher Auslastung dazu führen, dass der Kernel mehr mit der Verwaltung des virtuellen Speichers als mit den Prozessen selbst beschäftigt ist.

Mit diesem Wissen erklärt sich auch der Unterschied zwischen Buffer und Cache: Beide Zwischenstationen spielen eine Rolle, wenn Linux Daten zwischen Systemkomponenten transferiert. Während ein Buffer Daten enthält, die noch auf die Festplatte geschrieben werden, dient ein Cache zum Einlesen von Daten von festen Speichermedien.

Ein weiterer wichtiger Begriff ist das Context Switching. Dabei unterbricht Linux die Bearbeitung eines Prozesses, sichert den Speicherkontext und arbeitet dann einen anderen Prozess ab. Das Context Switching ist eine der kostspieligsten Operationen in einem Linux-System. Steigt innerhalb kurzer Zeit die Anzahl der Context Switches von wenigen Tausend auf über 100000, könnte dies ein Indikator für eine unnötig hohe Ressourcen-Nutzung (Overhead) bei der Bearbeitung von Prozessen sein.

Mit diesem Wissen kann sich der Linux-Admin daranmachen, mit den Tools Engpässe aufzuspüren. Die Programme sollte er dabei als Benutzer Root aufrufen, für den alle Daten sichtbar sind.

Vmstat

Den meisten Linux-Systembetreuern ist vermutlich Vmstat [1] ein Begriff. Dieses leistungsfähige Werkzeug zeigt eine tabellarische Übersicht der Prozesse, den RAM- und Page-Verbrauch, I/O sowie Informationen über die CPU-Aktivitäten. Wer das Tool ohne Parameter aufruft, sieht nur eine einzige Zeile mit Werten, Darin finden sich Durchschnittswerte seit dem letzten Reboot (Abbildung 1).

Abbildung 1: Ohne Optionen aufgerufen zeigt Vmstat Durchschnittswerte.

Abbildung 1: Ohne Optionen aufgerufen zeigt Vmstat Durchschnittswerte.

Spaltenweise

Die Ausgabe von Vmstat erfolgt dabei standardmäßig in sechs Spalten. Der erste Teil »procs« enthält die Werte »r« für die Anzahl der auf CPU-Zeit wartenden Prozesse, während »b« für die Prozesse steht, die sich in einem schlafenden Zustand befinden, der sich nicht unterbrechen lässt.

Die Spalte »memory« enthält unter »swpd« die Summe des genutzten virtuellen Speichers, »free« steht für die Summe des bisher ungenutzten RAM, »buff« für den Speicher, der als Buffer genutzt wird, und »cache« entsprechend für den als Cache verwendeten.

Der »swap« -Bereich der Ausgabe nennt mit »si« den Speicher, den Linux pro Sekunde von der Festplatte in den RAM schaufelt (Swap-in), »so« betitelt den umgekehrten Vorgang (Swap-out). Die Spalte »io« macht deutlich, wie viele Blocks das System pro Sekunde liest (»bi« ) und schreibt (»bo« ). Ein Blick auf den »system« -Bereich zeigt hingegen die Anzahl der Interrupts (»in« ) und Context-Switches (»cs« ) pro Sekunde.

Die letzte Spalte namens »cpu« ist recht ausführlich und gibt Werte in Prozent an: »us« zeigt den Anteil der CPU-Zeit, die Prozesse aus dem Userspace beanspruchen, »sy« ist der Messwert für die CPU-Zeit, die der Kernel für das Bearbeiten von Systemvorgängen benötigt. Die Angabe »id« bezeichnet die Idle-Time. Der letzte Wert der aktuellen Spalte, »wa« , gibt die Prozesse an, die auf Input- oder Output-Vorgänge warten.

Das Kommando »vmstat 1 5« lässt das Programm mit einer sekündlichen Aktualisierungsrate und fünf Ausgabezeilen laufen (Abbildung 2). In diesem Beispiel kommt es zweimal dazu, dass Prozesse auf CPU-Zeit warten und Linux gleichzeitig Daten von der Festplatte einliest (erste Ausgabezeile). In dem abgebildeten Beispiel sorgte das Kommando »updatedb« auf einem älteren Ubuntu 8.04 für die Ein- und Ausgaben sowie für die wartenden Prozesse.

Abbildung 2: Vmstat mit fünf Ausgabezeilen, die sich sekündlich aktualisieren.

Abbildung 2: Vmstat mit fünf Ausgabezeilen, die sich sekündlich aktualisieren.

Eine nützliche Vmstat-Option ist »-d« für Disk Statistics, sie führt zu einer leider etwas unübersichtlichen Zusammenfassung der I/O-Vorgänge im RAM und auf den Festplatten. Der Befehl »vmstat -s« zeigt Werte zu CPU- und Speichervorgängen in Listenform, was die Ausgabe für die automatisierte Auswertung durch Skripte brauchbar macht. Als interessantes Extra bietet Vmstat die Option »-p« , gefolgt von der Angabe einer Partition. Damit zeigt das Programm ausschließlich Zahlen zu den Lese- und Schreibvorgängen auf der gewählten Partition.

Vmstat erfreut sich zwar großer Beliebtheit im täglichen Einsatz. Seiner Funktionsvielfalt stehen aber Mängel bei der Darstellung gegenüber, es fehlt die klare Übersichtlichkeit.

Iostat

Während Vmstat sich vielseitig gibt, konzentriert sich Iostat [2] auf die Ein- und Ausgabe-Operationen eines Linux-Systems. Das Tool zeigt auch ohne Kommandozeilen-Optionen eine aussagekräftige Statistik. Die Zeile »avg-cpu« enthält Statistiken zu den CPUs und gibt einen Einblick in die allgemeine Auslastung. In Abbildung 3 scheint das System nicht viel zu tun zu haben: Die CPUs befinden sich zu rund 84 Prozent im Idle und nicht einmal ein Prozent der Prozesse wartet auf I/O. Sind wie hier mehrere CPUs vorhanden, zeigt Iostat die Durchschnittswerte über alle.

Abbildung 3: Iostat informiert über CPUs und eingehängte Blockgeräte.

Abbildung 3: Iostat informiert über CPUs und eingehängte Blockgeräte.

Anders sieht es mit der Auslastung bei den Blockdevices aus: Hier stellt die Spalte »tps« die Transfers pro Sekunde dar, die mit I/O-Anfragen an das Gerät gleichzusetzen sind und im Beispiel eine höhere Aktivität aufweisen. Die Spalte »Blk_read/s« bezeichnet die Anzahl der Blöcke, die Linux pro Sekunde vom angegebenen Gerät liest. Mit einem Block sind in der Regel 512 Byte gemeint. Unter »Blk_wrtn/s« stehen die Schreibzugriffe in der gleichen Maßeinheit, während die letzten beiden Spalten »Blk_read« sowie »Blk_wrtn« Gesamtstatistiken seit dem letzten Systemstart darstellen.

Der Aufruf von Iostat ohne Parameter gibt einen guten Überblick über das I/O-Geschehen. Bei Virtualisierung ist für Anwender zusätzlich der Wert »steal« von Interesse: Er zeigt an, wie viel Zeit die virtuellen Prozessoren mit unfreiwilligem Warten auf den Hypervisor verbringen. Wer die dargestellten Zahlen zu groß und somit zu unleserlich findet, der kann die Ausgabe per »iostat -m« auf MByte trimmen.

Weiteres Feintuning erreicht der Admin mit der Angabe des Parameters »-p« und der zu überwachenden Partition. Das Kommando »iostat -c« zeigt ausschließlich CPU-Werte an. Wer nicht an den Zahlen für die Blockdevices interessiert ist, kann sich damit unnötige Zeilen sparen. Für mehr Übersicht bei den Blockgeräten sorgt »iostat -d« , das die CPU-Statistiken versteckt. Natürlich lassen sich die Parameter auch kombinieren: »iostat -d -p drbd4« zeigt nur an, was gerade auf dem Device »drbd4« los ist.

Iostat unterstützt auch per NFS eingehängte Dateisysteme. Mit »iostat -n« lässt der Admin eine Übersicht erstellen, die alle eingehängten NFS-Verzeichnisse sowie den aktuellen Traffic in Blöcken und KByte pro Sekunde angibt. Wer mehr Details zum I/O-Geschehen benötigt, dem sei die Manpage ans Herz gelegt. Dort finden sich weitere nützliche Schalter wie etwa »-x« , der die Statistikanzeige um zahlreiche Werte erweitert.

Netstat

Netstat [3], das Tool für die Netzwerkdiagnose, ist gleichermaßen in der Windows- und Linux-Welt beliebt. Obwohl es mittlerweile die meisten Linux-Systeme durch das Programm »ss« ersetzen, greifen Systembetreuer immer noch zu dem gewohnten Werkzeug, das bereits fast 30 Jahre auf dem Buckel hat. Die Funktionen von Netstat sind so umfangreich, dass dieser Artikel nur die allerwichtigsten vorstellen kann. Das Kommando »netstat –ip« beispielsweise zeigt die Anzahl der gleichzeitig offenen Verbindungen, der Admin kann sie mit

netstat --ip | wc -l

zählen. Auskunft über lauschende Verbindungen erteilt Netstat mit der Option »-l« , wie Abbildung 4 zeigt (Ausgabe gekürzt). Weitere nützliche Optionen nennt die Netstat-Manpage.

Abbildung 4: Das Netzwerktool Netstat zeigt die lauschenden Verbindungen.

Abbildung 4: Das Netzwerktool Netstat zeigt die lauschenden Verbindungen.

Ifstat

Das Programm Ifstat [4] zeigt kurz und bündig den Netzwerktraffic für alle gefundenen Netzwerkinterfaces an. Ruft der Admin das Programm mit den Optionen »-a -b« auf, erhält er rasch Übersicht (Abbildung 5), denn so erfasst es alle Schnittstellen. Die ein- und ausgehenden Daten gibt das Programm in KBit/s an. Nutzen die Dienste auf dem System nicht alle verfügbaren Interfaces, lassen sich die ungenutzten mit der Option »-z« ausblenden. Wer die Ausgabe gerne so kurz wie möglich hält, lässt mit »ifstat -S« immer nur eine Zeile ausgeben, die sich ständig aktualisiert.

Abbildung 5: Alle oder einzelne Netzwerkinterfaces lassen sich mit Ifstat beobachten.

Abbildung 5: Alle oder einzelne Netzwerkinterfaces lassen sich mit Ifstat beobachten.

Dstat: Alle vereint

Wem das zu viele einzelne Tools für die Systemanalyse sind, der findet in Dstat [5] eine eierlegende Wollmilchsau, die fast alle Funktionen in sich vereint. Seine Farbgebung und feste Spaltenbreiten führen zudem dazu, dass es die Zahlen stets übersichtlich geordnet präsentiert. Die GPL-Software Dstat wurde 2004 in Python geschrieben und ist modular aufgebaut. Jede Spalte in der Ausgabe wird von einem Modul erzeugt, das sich unter »/usr/share/dstat/« findet.

Dstat ist bei den meisten Distributionen nachzuinstallieren, es steckt in der Regel im gleichnamigen Paket. Gleich ein erster Aufruf ohne Argumente zeigt die Ähnlichkeit mit Vmstat (Abbildung 6). So wie jener Klassiker stellt auch Dstat alle Werte in Tabellenform dar.

Abbildung 6: Dstat sorgt mit Tabellenform und Farben für Übersichtlichkeit.

Abbildung 6: Dstat sorgt mit Tabellenform und Farben für Übersichtlichkeit.

Die rote Farbe ist nicht unbedingt ein Indikator für ein Problem. Dstat ändert die Farbe, sobald Werte über einen im Modul festgelegten Schwellenwert hinausgehen. Dies soll die Lesbarkeit der Daten erhöhen und den Systemadministrator auf Änderungen im Systemverhalten aufmerksam machen. Wem jedoch die Farben ein Dorn im Auge sind, der kann sie mit »–nocolor« deaktivieren oder mit »–bw« an ein Terminal mit heller Hintergrundfarbe anpassen.

Die Spaltenbezeichnungen stimmen weitgehend mit denen von Vmstat überein und bedürfen daher keiner weiteren Erklärung. Interessant dagegen ist die große Anpassbarkeit, die Dstats modularer Aufbau erlaubt. Eine Übersicht über verfügbare Plugins verschafft das Kommando »dstat –list« . Der Aufruf von Dstat ohne Parameter entspricht der Standardeinstellung mit:

dstat -c -d -n -g -y

Schalter, die sich mit einem einzigen »-« aufrufen lassen, bedienen fest in Dstat implementierte Funktionen. Optionen, die aus externen Modulen stammen, brauchen zwei Striche »–« . Plugins lassen sich daher mit »dstat —Pluginname« aufrufen. Wer etwa »dstat –proc-count« eingibt, erhält eine sich permanent aktualisiertende Statistik über die gleichzeitig laufenden Prozesse.

Da Dstat die vielfältigen Funktionen von Vmstat, Iostat, Ifstat und Netstat abbildet, empfiehlt selbst der Programmautor Dag Wieers auf seiner Webseite, das Tool themenorientiert aufzurufen. Das bedeutet beispielsweise nur die Festplatten und Mountpunkte zu betrachten, was mit dem Kommando

dstat -d --disk-util --freespace

gelingt. Das Ergebnis zeigt Abbildung 7 (Ausgabe gekürzt). Dstat teilt die Ausgabe in vorhandene Disks und Partitionen. Wenn im Hintergrund Schreib- oder Löschvorgänge auf den dargestellten Partitionen erfolgen, machen sich die Änderungen automatisch in Dstat bemerkbar. Wer auf seinem System NFS-Verzeichnisse einbindet, findet diese ebenfalls in den Statistiken wieder.

Abbildung 7: Dstat in der Anwendung auf Festplattenpartitionen.

Abbildung 7: Dstat in der Anwendung auf Festplattenpartitionen.

Regelmäßige Benutzer von Vmstat möchten sich vielleicht auf die Analyse des Speichers konzentrieren. Das Kommando

dstat -g -l -m -s --top-mem

erzeugt eine Ansicht für diesen Zweck. In Abbildung 8 ist zu sehen, wie der LDAP-Server »slapd« im Laufe der Zeit mehr Ressourcen für sich beansprucht. Die Option »–top-mem« entlarvt den Prozess als Speicherverbraucher Nummer eins. Parallel zum steigenden RAM-Bedarf von »slapd« verzeichnet die Spalte »memory-usage« einen Anstieg des Cache. Während des Dstat-Durchlaufs hat der Admin eine aufwändige LDAP-Suche gestartet, die den Daemon zum Lesen von der Festplatte veranlasste.

Abbildung 8: Auf der Jagd nach dem größten Speicherverbraucher: Hier hat Dstat den LDAP-Daemon ermittelt.

Abbildung 8: Auf der Jagd nach dem größten Speicherverbraucher: Hier hat Dstat den LDAP-Daemon ermittelt.

Daneben kann der Dstat-Anwender auch den Fokus auf die Beobachtung der CPU legen, ähnlich wie es ihm mit Iostat möglich ist. Um den Prozess zu sehen, der die meiste CPU-Zeit benötigt, gibt er

dstat -c -y -l --proc-count --top-cpu

ein (Abbildung 9). Wie der Wert für »idl« unter »total-cpu-usage« signalisiert, ist das untersuchte System nicht sehr ausgelastet.

Abbildung 9: Dstat verwandelt sich mit den richtigen Optionen in eine Art Iostat und beobachtet die CPU-Auslastung.

Abbildung 9: Dstat verwandelt sich mit den richtigen Optionen in eine Art Iostat und beobachtet die CPU-Auslastung.

Aufmerksame Systemadministratoren werden das Programm zudem noch auf das Netzwerk loslassen. Dazu dient das Kommando:

dstat -n --socket --tcp --udp

Während die Messwerte für die Sockets und das UDP-Protokoll in diesem Beispiel wenig Veränderung zeigen, ist unter »net/total« ersichtlich, dass die Netzwerkkarten gerade Anfragen beantworten mussten (Abbildung 10). Auch hier steckte ein LDAP-Search hinter der gesteigerten Aktivität, die Dstat durch Farbänderung visuell hervorhebt.

Abbildung 10: Dstat beim Beobachten der TCP- und UDP-Sockets.

Abbildung 10: Dstat beim Beobachten der TCP- und UDP-Sockets.

Dstat entpuppt sich als Funktionswunder, gleichzeitig aber auch als regelrechtes Optionsmonster. Damit der Überblick nicht verloren geht, fasst Tabelle 1 die wichtigsten Optionen aus den Beispielen diese Artikels zusammen.

<a href="#article_t1" class="table" srcset=

Tabelle 1: D-Stat-Optionen im Überblick” width=”232″ height=”293″ /> Tabelle 1: D-Stat-Optionen im Überblick

Ausblick

Wer Dstat für sich entdeckt hat, kommt schnell auf die Idee, Plugins für seine eigenen Anforderungen zu schreiben. Als Programmiersprache kommt dafür Python zum Einsatz. Sind die selbst gemachten Module unter »/usr/share/dstat/« abgelegt, lassen sie sich als Kommandozeilen-Option mit zwei Minuszeichen vor dem Modulnamen aufrufen. Eine passende Vorlage liefert die Datei »dstat_helloworld.py« im Modulverzeichnis. Das Codebeispiel lässt sich mit »dstat –hello« aufrufen, erfüllt aber nur einen exemplarischen Zweck.

Wer mehr Wert auf aussagekräftige und praxisnahe Beispiele legt, sollte einen Blick in die anderen Dateien im Verzeichnis »/usr/share/dstat« werfen. Hier gibt es für nahezu alle Anwendungsfälle bereits eine Vorlage, die sich für die eigenen Zwecke nutzen lässt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben