Linux-Systeme werden von LINET haufenweise administriert. Auf den meisten dieser Systeme gibt es eigentlich nie Performanceprobleme. Doch was tun wenn das System tatsächlich mal nicht so performant ist, wie man es gerne hätte oder wie man es erwarten würde?
Als wichtigster Anhaltspunkt für die Performance eines Linux-Systems gilt die durchschnittliche Systemlast, oder auf Neudeutsch Load Average. Dieser gibt an, wie viele Prozesse in der letzten Minute, den letzten fünf und den letzten 15 Minuten durchschnittlich auf Systemressourcen jeglicher Art warten mussten. Dabei spielen verschiedene Ressourcen wie z.B. Prozessor, Arbeitsspeicher, Festplatte oder auch die Netzwerkhardware in die Berechnung hinein.
Wie Experten wissen, behandelt Linux alles als Dateien. Somit gibt es unzählige „virtuelle“ Dateien – hauptsächlich im /proc-Dateisystem – aus denen man sehr viele Informationen zur aktuellen Befindlichkeit des Systems herausfinden kann. Mit „sehr viele“ sind tatsächlich sehr viele gemeint, denn jeder laufende Prozess alleine generiert bereits mehrere hundert Dateien unterhalb von /proc! Außerdem beinhalten sie oft schwer entzifferbare Daten, die man sich erst einmal aufbereiten müsste, um die relevanten Informationen heraus zu filtern.
Zum Glück haben findige Programmierer diese Filterung bereits in Programmen zur Systemanalyse eingebaut, auf die man als Systemadministrator natürlich sehr gerne zurückgreift! 😉
Das vereinfacht die Suche nach Flaschenhälsen zwar, dennoch muss man die zurückgegebenen Daten teilweise mit einem geschulten Blick ansehen, um das eigentliche Problem zu erkennen. Hier stelle ich drei dieser nützlichen Tools kurz vor.
top
Ein sehr einfaches Tool zum Überwachen von Prozessen ist top. Dieses listet einem die laufenden Prozesse auf und sortiert sie standardmäßig nach der Benutzung von CPU Ressourcen (sollte auf dem System anstatt des Paketes procps das neuere procps-ng in Version >= 3.3.10-1 genutzt werden, ist die Standardansicht leider rot und wird als Baumstruktur angezeigt). Im Header bekommt man einige generelle Statusinformationen zu CPU, Arbeitsspeicher und Systemlast angezeigt. Darunter eine Liste der laufenden Prozesse. Mittels < und > kann man nachträglich verändern, nach welcher Spalte diese sortiert werden. Das Beste an top ist: es ist auf beinahe jedem Linux installiert.
htop
Ein sehr ähnliches, aber um einiges komfortableres Tool ist htop. Obwohl es nicht in klassischem schwarz-weiß daherkommt, ist es mein erster Anlaufpunkt bei der Analyse von Lastproblemen. Die Installation unter Debian/Ubuntu ist mit apt-get install htop auch schnell erledigt. Über „F2″ kann man noch einige Einstellungen vornehmen, um z.B. die im Header angezeigten Informationen (Detailgrad, Design etc.) anzupassen oder auch, um die Wartezeit auf I/O (Input/Output) einzelner Prozessorkerne darzustellen – diese Einstellungen können bei Programmstart auch aus der Datei ~/.htoprc gelesen werden. Natürlich kann man auch mit den Informationen aus htop noch nicht alles bis aufs Kleinste analysieren. CPU-Probleme werden aber recht schnell und einfach sichtbar gemacht. Zusätzlich bietet es die Möglichkeit, sich die Prozesse mit „F5“ als Baum anzeigen zu lassen – vergleichbar mit pstree – um somit zu sehen, welcher Prozess durch welchen vorherigen Prozess gestartet wurde, was z.B. auf OpenVZ Virtualisierungssystemen von großem Vorteil ist. Hier laufen alle Prozesse eines Containers (Virtueller Server) auf dem Hostsystem und stammen somit von einem Elternprozess pro Container ab. Des weiteren können mit „F9“ Signale wie „KILL„, „TERM“ oder „HUP“ an einzelne Prozesse geschickt werden, um diese zu töten, zu beenden oder sie je nach Implementation des Programms neu zu laden. Auch die Möglichkeit zur Sortierung der Prozessliste mit „F6“ ist intuitiv und einfacher als in top zu nutzen.
atop
atop würde ich als „König“ der Analysetools bezeichnen. Das bedeutet leider auch, dass es sehr viele Informationen auf einmal anzeigt. Von CPU über RAM bis zu Netzwerk und Festplatte wird alles auf einen Blick dargestellt. Einem Laien macht das die Sache mit der Analyse natürlich nicht leichter. 😉 Zum Glück markiert atop potentiell kritische Werte von sich aus erst hellblau und im Ernstfall rot. Sollte man ein Problem auf dem Monitor angezeigt bekommen, kann man mit einem Druck auf „z“ die Aktualisierung der Anzeige stoppen und nach der Begutachtung der aktuellen Situation mit selbiger Taste wieder aufnehmen. Standardmäßig aktualisiert atop die Anzeige alle zehn Sekunden, es kann jedoch eine beliebige Zeit in Sekunden hinter den atop-Aufruf geschrieben werden.
Neben den Informationen zu den Hardwareressourcen und deren Auslastung bekommt man zusätzlich eine Liste aktiver Prozesse angezeigt, die man wiederum mittels Tastendruck nach Nutzung der einzelnen Ressourcen sortieren lassen kann (z.B. „c“ für CPU, „d“ für Disk und „m“ für Memory – theoretisch auch „n“ für Netzwerk, allerdings wird dafür ein zusätzliches Kernelmodul benötigt).
Ein riesiges Feature von atop ist, die Daten mit dem Parameter „-w /dateiname.txt“ auch dauerhaft in eine Datei schreiben zu lassen, um die so gesammelten Daten hinterher wiederum – ebenfalls mit dem Parameter „-r /dateiname.txt“ – auszulesen. So kann z.B. auch Problemen auf die Schliche gekommen werden, die nur periodisch auftreten, ohne dauerhaft den Monitor im Blick zu haben und zu hoffen, dass das Problem gerade in diesem Augenblick auftritt. Allerdings muss man dabei aufgepassen, denn in die Datei werden schnell um die 200 MB/Tag geschrieben.
Fazit
Natürlich ist das nur ein kleiner Einblick in die Analyse von Linux-Systemen, denn es gibt noch zahlreiche weitere Tools wie z.B. iotop, iftop, oder auch programmspezifische Tools wie apachetop und mytop. Allerdings kann man mit den drei hier Vorgestellten bereits die meisten Probleme erfolgreich analysieren und entsprechende Maßnahmen einleiten. Wie immer in Linux, helfen einem die manpages (bzw. bei den vorgestellten Tools auch die Taste „h„) schnell weiter, um die angezeigten Informationen einzugrenzen, anzupassen oder sinnvoll zu sortieren und so noch schneller zu einem Ergebnis zu kommen.