Linux - Systemauslastung analysieren

Linux-Administratoren müssen über die Auslastung ihrer Server bestens informiert sein, um Schwachstellen des Systems ausfindig zu machen und gegebenenfalls aufzurüsten. Dabei reicht es sicherlich nicht aus, nur die Festplattenbelegung auszuwerten, um ausreichend freien Speicherplatz zu gewährleisten. Vor allem die Auslastung des Prozessors und des Arbeitsspeichers sind entscheidend, da sie in der Regel maßgeblich für die Leistungsfähigkeit des Systems verantwortlich sind.

Linux - Systetemauslastung analysieren und Schwachstellen finden

Aus diesem Grund verlässt man sich oftmals auf Empfehlungen anderer, wenn man ein neues System aufsetzt. "Ein stark frequentierter Webserver mit einem komplexen Content Management System wie Typo3 braucht vor allem eins: viel RAM!

  • Ist die CPU zu stark ausgelastet oder langweilt sie sich nur bzw. befindet sie sich hauptsächlich im IDLE-Zustand?
  • Ist ausreichend viel Arbeitsspeicher vorhanden oder muss das System ständig auslagern (SWAP)?
  • Muss ich den Arbeitsspeicher aufrüsten?
  • Sind ggf. andere Komponenten wie die Festplatte der Flaschenhals im System?

In diesem Artikel werden diese Fragen beantwortet und dem Interessenten gezeigt, wie man die Systemauslastung unter Linux analysieren kann. Vor allem die bekannten Tools top und free werden genauer erläutert und erklärt, wie die Systemdaten interpretiert werden. Ziel ist es vor allem, dass man die Ausgabe bzw. die Werte von top versteht und richtig interpretiert. Dazu werden die Grundlagen des Linux-Speichermanagements und des so genannten System Load thematisiert.

 

Zusätzliche Informationen
Ein sehr nützliches Tool zur Langzeitanalyse und zum Webserver-Monitoring ist das Tool munin, welches in folgendem Artikel ausführlich vorgestellt wird: munin Monitoring-Tool

Grundlegende Fragen und Erläuterungen

Warum läuft unter Linux der Arbeitsspeicher mit laufender Zeit voll?

Viele Linux-Einsteiger wundern sich darüber, dass mit zunehmender Zeit immer weniger freier Arbeitsspeicher zur Verfügung steht. Ein Fehler beim Auslesen? Ist Linux zu speicherhungrig? Die Antwort ist Nein, denn das Speichermanagement von Linux funktioniert nach dem Motto "Freier Arbeitsspeicher ist verschwendeter Arbeitsspeicher". So belässt Linux nahezu alles im Arbeitsspeicher und räumt erst dann auf, wenn kein freier Arbeitsspeicher mehr zur Verfügung steht. Es könnte ja sein, dass eine andere Anwendung diese Daten zufällig demnächst ebenfalls anfragt.

linux arbeitsspeicher belegung: der grüne Bereich zeigt, dass ein Großteil des belegten RAM für zwischengespeicherte Daten verwendet wird
Der grüne Bereich zeigt, dass ein Großteil des belegten RAM für
zwischengespeicherte Daten verwendet wird

Dieses Prinzip hat viele Vorteile und macht Sinn. Stellen wir uns vor, das Bildbearbeitungsprogramm GIMP öffnet das Bild Urlaub2011.JPG. Wir schließen nun GIMP inkl. des Bildes Urlaub2011.JPG. Linux behält das Bild aber weiterhin im Arbeitsspeicher (schadet auch niemanden, solange ausreichend RAM vorhanden ist). Fordert nun eine andere Anwendung genau dieses Bild an, muss es nicht von der Festplatte geladen werden. Ein enormer Zeitvorteil.

Was ist der Linux Load?

Die load average ist ein sehr wichtiger Wert im Bezug auf die Systemauslastung. Der Load in Linux-Systemen ist die Anzahl an wartenden Prozessen. Der optimale Wert entspricht immer der Anzahl der im System vorhandenen Prozessoren. In Systemen mit einem Single-Core-Prozessor ist der optimale Load 1, da zu dem Zeitpunkt ein Prozess in der Bearbeitungsschlange des Prozessors ist. Liegt der Wert unterhalb von 1, ist das System unterfordert, bei Werten über 1 überfordert. In Multicore-Prozessoren liegt der optimale Load höher. Bei einem Quad-Core-Prozessor beispielsweise 4.

Wichtig: die Load beschreibt nicht die Auslastung der CPU. Es kann mehrere Gründe haben, warum die Bearbeitungswarteschlange wächst und immer mehr Prozesse auf ihre Abarbeitung warten.

Beispiel 1: Bei einem E-Mail-Server könnten bei einem hohen E-Mail-Aufkommen langsame Festplatten Grund dafür sein, dass die Abarbeitung zu langsam erfolgt. Die Festplatten sind zu langsam und können die anderen Komponenten wie bsp. die CPU nicht schnell genug mit Arbeit versorgen. In diesem Fall wäre die CPU-Last gering, aber die load average hoch.

Beispiel 2: Zu wenig RAM sorgt dafür, dass Prozesse ausgelagert werden müssen. Wie im ersten Beispiel sind die Festplatten der Flaschenhals. Auch in diesem Fall steigt die load average und die CPU-Last ist vergleichsweise gering. Am Ende dieses Artikels wird detailliert erklärt, woran man ein Mangel an Arbeitsspeicher erkennt.

Beispiel 3: Der klassische Fall ist, wenn die CPU zu langsam ist und die Prozesse nicht schnell genug abarbeiten kann. In diesem Fall ist die CPU-Auslastung bei 100% (oder besser gesagt %id ist 0) in Kombination mit einer hohen load average.

Zusammenfassung: die load average gibt Auskunft darüber, wie viele Prozesse durchschnittlich in der Warteschlange waren, um bearbeitet zu werden. Die Gründe hierfür können unterschiedlich sein, so dass man analysieren muss, welche Komponente (CPU, RAM, HDD, LAN, ...) der Flaschenhals des Systems ist. Eine hohe load average sagt aber eindeutig aus, dass das System in irgendeiner Form überlastet ist. Weitere Informationen findet man auf Wikipedia.

Informationen von top und free verstehen und richtig interpretieren

Die load average ist demzufolge unsere erste Anlaufstelle. Ist der Load zu hoch, so ist eine Schwachstelle im System vorhanden. Es ist nun Aufgabe des Admins, diese Komponente (Prozessor, Arbeitsspeicher, Festplatte oder etwas anderes) zu identifizieren. Dazu werden nun zwei wichtige Programme vorgestellt, die bei der Analyse der Systemauslastung sehr wichtig sind. Sicherlich ist jeder Linux-Anwender in seinem Leben mindestens einmal über die Tools top und free gestolpert.

Linux-Systemauslastung: top zeigt die Auslastung der wichtigsten Systemressourcen
Das Tool top

Dieser Ausschnitt zeigt das Tool top, welches die Auslastung der wichtigsten Systemressourcen wie CPU oder RAM anzeigt. Die farblich hervorgehobenen Bereiche sind besonders interessant, das sie uns Auskunft über die System- und CPU-Auslastung (orange) und die Belegung des Arbeitsspeichers (grün) geben. Es ist wichtig, dass man die zahlreichen Werte von top versteht, um die Systemauslastung analysieren zu können. 

Gehen wir Schritt-für-Schritt die einzelnen Werte durch:

top im detail: up-time, users, load average

Die erste Zeile zeigt die aktuelle Uhrzeit, dass das System seit 45 Tagen hochgefahren (up) ist und Informationen über die load average. Die Werte zeigen den durchschnittlichen Load der letzten 1 / 5 / 15 Minuten an. Anhand dieses Beispiels sieht man, dass kurzfristig das System etwas überlastet ist, da im Durchschnitt der letzten Minute zwei Prozesse (2,03) auf die Abarbeitung warten mussten (es handelt sich hier um ein Single-Core-System). Auf die letzten 15 Minuten gesehen ist das System mit 0,59 Prozessen eher unterfordert. Die drei Werte verdeutlichen einen Trend über die letzten 15 Minuten.

top im detail: tasks total, running, sleeping, stopped, zombie

Die zweite Zeile ist eindeutig. Sie informiert über laufenden Prozesse und ihren aktuellen Zustand:

total = Gesamtanzahl der Prozesse auf einem System
running = Prozesse im Zustand running (dieser wird gerade von der CPU ausgeführt)
sleeping = Prozesse, die auf die Bearbeitung durch die CPU warten
stopped = Prozess im Status gestoppt.
zombie =Zombie Prozess

Die dritte Zeile gibt Auskunft über die CPU-Auslastung. Hierbei interessiert und auf den ersten Blick der IDLE-Wert (%id). Wenn dieser bei 0 liegt, ist die CPU voll ausgelastet. Man muss also umgekehrt denken. Interessant ist auch der Wert %wa. Ist dieser relativ hoch, so deutet dies auf hohe Festplattenaktivitäten und schlussfolgernd auf starke Nutzung der SWAP-Partition hin. Das System scheint über zu wenig RAM zu verfügen.

%us = CPU-Nutzung von User-Prozessen (user mode)
%sy = CPU-Nutzung von System- und Kernel-Prozessen
%ni = CPU-Nutzung von Prozessen, die keine Standard-Priorität besitzen (ni = NICE)
%id = CPU im Leerlauf (IDLE)
%wa = Zeit, welche die CPU durch I/O Zugriffe (bsp. Festplatte) warten muss
%hi = CPU-Nutzung durch Hardware Interrupts
%si = CPU-Nutzung durch Software Interrupts

Die nächsten beiden Zeilen geben eine Übersicht über den vorhandenen Arbeitsspeicher (physikalisch (Mem) und Auslagerung (Swap)) und deren Belegung. Der grüne Bereich bezieht sich auf den physikalisch vorhandenen Arbeitsspeicher, der rote Bereich auf die Swap-Partition (Auslagerung). Grundlegend gilt, dass der Gesamtspeicher (total) sich in genutzten (used) und frei verfügbaren Speicher (free) aufteilt:

total = used + free

Hinweis: ein System sollte niemals dazu gezwungen werden, Daten auf den langsamen Festplattenspeicher auszulagern! Dies verlangsamt die Geschwindigkeit des gesamten Systems enorm!

Betrachten wir zuerst den physikalischen Arbeitsspeicher (grün). Wie bereits am Anfang dieses Artikels erwähnt belässt Linux viele Daten im Arbeitsspeicher, die momentan nicht in Gebrauch sind. Aus diesem Grund ist die Angabe used alleine betrachtet ohne Bedeutung. In obigen Beispiel sind ca. 860 MB der 1024 MB belegt und nur 124 MB zur freien Verfügung. Auf den ersten Blick ist das bedrohlich wenig!

Wie hoch ist aber der Anteil der Daten, die momentan gar nicht verwendet und von Linux zwischengespeichert werden? Diese Antwort geben uns die Werte buffers und cached, welche die zwischengespeicherten Daten repräsentieren und die man von used abziehen muss. Sollte zu wenig RAM zur Verfügung stehen, wird Linux die buffers und cached files wieder freigegeben.

Real verfügbarer Arbeitsspeicher = used - buffers - cached

In unserem Beispiel bedeutet dies, dass von den 860 MB des belegten Speichers immerhin 490 MB auf cached und 216 MB auf buffers fallen. Daraus resultiert, dass unser System eigentlich nur 159 MB aktiv im Arbeitsspeicher hält! Etwas übersichtlicher ist das Tool free, welches uns ausschließlich über die Arbeitsspeicher-Belegung informiert:

Linux-Systemauslastung: free informiert über die Arbeitsspeicher-Belegung

Die erste und dritte Zeile kennen wir bereits aus top. Interessant ist die zweite Zeile, in der free bereits die buffers und cached abgezogen hat und somit die wirkliche Belegung des Arbeitsspeichers anzeigt.

linux top: prozesse anzeigen (PID, USER, PR, NI, VIRT, RES, SHR, S, %CPU, %MEM, TIME, COMMAND)

Zu guter letzt betrachten wir nun die Übersicht der laufenden Prozesse. Für die Analyse der Systemauslastung sind die Spalten %CPU (prozentuale CPU-Auslastung), %MEM (prozentuale Arbeitsspeicher-Belegung) und RES (Speicherverbrauch).

PID = Die Prozess-ID
USER = Der Benutzer, unter dessen Kennung der Prozess läuft bzw. gestartet wurde
PR = Dynamic priority
NI = Nice-Wert, sprich die Priorität, mit welcher der Prozess gestartet wurde
VIRT = Virtueller Speicherverbrauch. Beinhaltet auch alle Ressourcen (bsp. Programm Bibliotheken), welche mehrfach verwendet werden können. Daher nicht aussagekräftig für den Speicherverbrauch eines Prozesses.
RES = Speicherverbrauch (RAM) des Prozesses. Beinhaltet aber keine Daten, die ausgelagert wurdem-
S = Prozess-Status
%CPU = Prozentualer Zeitanteil der CPU für diesen Prozess
%MEM = Prozentualer Anteil des RAMs für diesen Prozess
TIME+ = Die Gesamtzeit, mit der sich die CPU diesem Prozess gewidmet hat
COMMAND = Name des Prozesses

Nützliche Tastenkombinationen zu top

1 = CPU-Kerne einzelnd anzeigen lassen
m = Anzeigen der Speicherwerte
i = IDLE-Prozesse ausblenden
O = Auswählen Sortieren nach
M = sortieren nach %MEM

Analyse: woran erkenne ich, dass zu wenig Arbeitsspeicher (RAM) vorhanden ist?

Wenn ein System über zu wenig RAM verfügt, muss es Daten vom Arbeitsspeicher auf die Festplatte, der so genannten SWAP-Partition auslagern. In der Regel wird die SWAP-Partition nicht genutzt und daher sollte man hellhörig werden, wenn die SWAP-Partition stärker benutzt wird. Die Nutzung der SWAP-Partition ist aber an sich noch kein Problem, so lange keine Daten von aktiven Programmen dort abgelegt werden.

Der nächste Blick geht also wieder auf den physikalischen Arbeitsspeicher. Sind hier unter free 0K frei, verstärkt sich die Annahme, dass das System zu wenig RAM hat. Wenn nun auch buffers / cached gegen 0 gehen, das System also keine zwischengespeicherte Daten im RAM vorhält und somit nur Daten aktiver Prozesse im RAM sind, dann muss das System aufgrund von Platzmangel im Arbeitsspeicher auslagern. In diesem Fall ist eine Aufrüstung des Arbeitsspeichers zwingend notwendig.

In der Regel bearbeitet die CPU nun verstärkt I/O-Anfragen, so dass unter %wa der Wert ansteigt. Folgende Darstellung zeigt, wenn ein System zu wenig RAM besitzt und überlastet ist:

Zu wenig RAM im System: SWAP-Partition wird genutzt, buffers/cached sind 0 und die CPU-Auslastung von %wa ist auffällig hoch
Zu wenig RAM im System: SWAP-Partition wird genutzt, buffers/cached sind 0
und die CPU-Auslastung von %wa ist auffällig hoch

Woran erkenne ich, dass meine Festplatten zu langsam sind?

Im Vergleich zum Prozessor und RAM sind Festplatten oftmals ein Flaschenhals. Das gleichmäßige Schreiben und Lesen großer Daten (Videos, Bilder, große Dateien) stellen in der Regel nicht das Problem dar. Vielmehr sind es viele zeitgleiche Zugriffe, bei denen kleine Datenmengen an unterschiedlichen Stellen auf der Festplatte gelesen werden. Ein gutes Beispiel hierfür ist ein Webserver, der viele kleine Daten (Bilder, JavaScript, HTML-Dateien, etc.) zeitgleich an zahlreiche Besucher ausliefern muss. Die Festplatte muss also mit dem Lese-/Schreibkopf viel "hin- und herspringen", da die Daten willkürlich gelesen werden müssen. Ist die Festplatte zu langsam, sind Prozessor und RAM nicht ausgelastet und trotzdem ist der Server träge.

Wann erkennt man also, wenn die Festplatten überfordert sind und der Austausch durch schnellere Modelle bzw. der Einsatz eines RAID-5/RAID-10 in Erwägung gezogen wird? Zu aller erst sollte man einen Blick auf die load average werfen. Liegt diese überdurschnittlich hoch (ab 2-5), gleichzeitig aber die CPU-Auslastung (%us) und die RAM-Belegung gering sind, so kommen die I/O Zugriffe (Input/Output) schnell in Verdacht.

Wichtig ist nun unter Top der Wert %wa in der Zeile der CPU-Werte. Diese zeigt an, wie lange die CPU auf I/O-Zugriffe (in den meisten Fällen auf die Festplatte) warten muss. Ist dieser Wert zu hoch, können die Festplatten die Anfragen nicht schnell genug abarbeiten und sind somit der Flaschenhals.

Linux - Analyse einer langsamen Festplatte (%wa I/O)

Es stellt sich die Frage, ab welchem Wert die Waiting Access Time zu hoch ist. Hier hat sich die Formel 1 / Anzahl der Prozessoren etabliert. Bei einem Acht-Kern-Prozessor sollte der Wert also nicht über 12,5% liegen (1 / 8 = 0,125 = 12,5%).

Eine zusätzliche Bestätigung liefert das Tool iostat. Der Aufruf erfolgt mittels iostat 1:

Linux Festplattenauslastung mit iostat analysieren

Entscheidend ist der Wert unter %iowait. Auch dieser gibt Auskunft darüber, wie lange die CPU auf die Festplatte (oder genauer gesagt auf das I/O-Gerät) warten muss.

Weitere Quellen zum Thema

http://de.wikipedia.org/wiki/Load

http://www.linuxjournal.com/article/9001 [EN]

http://www.linuxforums.org/articles/using-top-more-efficiently_89.html [EN]

Munin Webserver Monitoring