Wie ausgelastet ist mein Server? Teil 2

Strand

Strand

In der letzten Woche haben wir uns mit Prozessen, deren Metadaten und dem Befehl ps beschäftigt (Wie ausgelastet ist mein Server? Von Zombies und Waisen). Als Bild habe ich eine Dampflok gewählt.

Viele Server laufen jedoch tatsächlich eher vor sich hin, daher diesmal der entspannende Blick aufs Meer.

Heute wollen wir uns mit der Systemauslastung an sich beschäftigen. Fragen wie: Ist die CPU ausgelastet? Ist genug Arbeitsspeicher vorhanden? Sind andere Komponenten wie die Festplatte ausreichend dimensioniert?

Um sich an die Antworten heranzutasten, muss man sich mindestens mit einem Programm namens top näher beschäftigen.

Grundlegendes

Beim Befehl ps sollte man in etwa wissen, wonach man sucht, um ihn sinnvoll nutzen zu können. Bevor wir uns mit weiteren Befehlen beschäftigen, möchte ich daher ein paar grundlegende Dinge ansprechen.

Warum ist der Arbeitsspeicher immer voll?

Egal wieviel Arbeitsspeicher vorhanden ist, er ist immer voll. Die Betriebssysteme versuchen soviel wie irgend möglich in den physischen Arbeitsspeicher (RAM) zu legen. Wenn der dann irgendwann knapp wird, wird vom Betriebssystem bei Bedarf „aufgeräumt“, bzw. nicht unbedingt benötigte Daten aus dem physischen Arbeitsspeicher in den Swapspeicher ausgelagert. Der Swapspeicher ist ein Teil der Festplatte und langsamer im Zugriff als der physische Arbeitsspeicher.

Physischer Arbeitsspeicher ist schnell und eher klein und teuer, Festplattensspeicher ist langsamer, aber gross und billig.

Arbeitsspeicher und Swapspeicher zusammen ergeben den virtuellen Speicherraum. Für Programmierer (und Programmiersprachen und Compiler und eigentlich für alle) ist es viel einfacher, mit logischen, linearen und unfragmentierten Speicheradressen in virtuellem Arbeitsspeicher zu arbeiten, als mit fragmentierten, nicht linearen, physikalischen Adressen im RAM oder auf der Festplatte. Das Betriebssystem übernimmt die Übersetzung der logischen in die physikalischen Ebene.

Schemabild der Anwendung des virtuellen Speichermanagement: links: virtueller Speicherraum pro Prozess, Speicher ist linear und unfragmentiert rechts: reale Speicherquellen, typischerweise RAM oder Festplatte, mehrere, auch kleine Speicherfragmente können verwendet werden; in rot Speicherverwendung anderer Prozesse, unsichtbar im virtuellen Speicherraum - https://de.wikipedia.org/wiki/Virtuelle_Speicherverwaltung

Durch Swapping wird versucht eine akzeptable Balance aus Zugriffsgeschwindigkeit und Grösse zu erhalten. Wenn beispielsweise ein Prozess aktiviert wird, wird ein anderer Prozess in den Hintergrund (auf die Festplatte in eine Auslagerungsdatei) geswappt. Ausser dem Begriff swapping gibt es auch das paging. Swapping ist die ältere Methode, paging die neuere Technik.

Ein virtueller Arbeitsspeicher ermöglicht auch Speicherschutzmechanismen, so dass sich einzelne Prozesses „nicht ins Gehege“ kommen oder Daten auslesen, die nicht für sie bestimmt sind.

Die Antwort auf die Frage „Ist genug Arbeitsspeicher vorhanden?“ ist also gar nicht so einfach …

Hier noch ein paar Notizen zum Swap unter Linux.

Wie schnell ist meine Festplatte?

Auch so ein Thema. Mit dem Befehl

sudo time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"; rm ddfile

kopieren Sie 2GB Daten in die Datei ddfile und löschen diese anschliessend wieder.

So sehen die Ergebnisse auf unterschiedlichen Servern aus

Normale Festplatte

250000+0 records in
250000+0 records out
2048000000 bytes (2.0 GB) copied, 7.05998 s, 290 MB/s

SSD

250000+0 records in
250000+0 records out
2048000000 bytes (2.0 GB) copied, 0.78132 s, 2.6 GB/s

Die Werte unterscheiden sich gravierend. Der Server mit der SSD kann also zehnmal schneller eine Datei kopieren, als der Server mit der herkömmlichen Festplatte.

Es gibt zahlreiche Benchmarks für Festplatten und es geht auch nicht drum, welche nun die schnellste ist. Es geht eher darum, die Gesamtsituation Ihres Servers einzuordnen. Ist Ihr Server beispielsweise eine „eigene“ Maschine mit einer eigenen Festplatte oder handelt es sich um einen virtualisierten Cloud Server, der sich Ressourcen mit anderen Nutzern teilt? Im letzten Fall kann der Zugriff mal extrem schnell gehen und mal eher langsam.

Tools

Nach der Vorrede wollen wir nun aber doch einen Blick auf die beiden nützlichen Tools top und free werfen, bevor Sie alle Illusionen verlieren 🙂

top

Wenn Sie den Befehl top aufrufen, dann sehen Sie so etwas …

top
top

Die Sache sieht zwar unspektalär aus, enthält aber alles wissenswerte über Ihren Server.

Lassen Sie uns die Anzeige Zeile für Zeile durchgehen

1. Zeile

top - 16:29:18 up 401 days,  6:34,  1 user,  load average: 0.49, 0.30, 0.25
  • top: Der Name des Programms
  • 16:29:18: Die Zeit auf Ihrem Server
  • up 401 days, 6:34: Die sogenannte Uptime. Dieser Server läuft seit 401 Tagen und 6 Stunden ohne Neustart. Sie können diese Zeile auch separat ausgeben, indem Sie den befehl uptime aufrufen
  • 1 user: Ein Benutzer ist momentan angemeldet
  • load average: 0.49, 0.30, 0.25: Die durchschnittliche Last des Systems in den letzten 1, 5, 15 Minuten. In diesem Fall war die Last vor 15 Minuten 0.25, in der letzten Minute war sie fast doppelt so hoch, nämlich 0.49. Vermutlich gab es gerade ein paar Besucher mehr auf den Websites, die dieser Server hosted. Die Zahlen, die angegeben werden, sind die Anzahl der Prozesse, die auf eine Ausführung warten. Je höher der Wert, desto ausgelasteter das System. Die untere Grenze ist 0 und stellt den Idealzustand dar. Ein unbelastetes System, dass mit voller Kraft arbeiten kann. Eine obere Grenze gibt es nicht. Die load average ist die einfachste Art festzustellen, wie es um das System bestellt ist. Die drei Werte werden auch in eine Datei geschrieben, die Sie beispielsweise mit dem Befehl cat /proc/loadavg auslesen können.

2. Zeile

Tasks: 119 total,   1 running, 118 sleeping,   0 stopped,   0 zombie

In der zweiten Zeile geht es um Prozesse (Tasks). Auf dem System laufen gerade 188 Prozesse, von denen 118 schlafen, keiner gestoppt ist und es existieren auch keine Zombieprozesse

3. Zeile

%Cpu(s):  1.2 us,  0.2 sy,  0.0 ni, 98.6 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st

Hier wird es etwas kryptischer, es geht um die prozentuale CPU-Auslastung verschiedener Prozesse.

  • us 1.2: Nutzung von User-Prozessen
  • sy 0.2: Nutzung von System/Kernel- Prozessen
  • ni 0.0: Prozesse, die mit einem hohen nice Wert laufen (also hoher Priorität)
  • id 98,6: Der Leerlaufanteil des Prozessors heisst idle. Der Zustand idle bedeutet, dass das Gerät untätig ist und auf Arbeit wartet, in diesem Fall immerhin 98,6 % der CPU-Zeit! Das hört sich sehr viel an, ist aber kein unüblicher hoher Wert.
  • wa 0.1: Die Zeit, die das System auf Eingaben (meist die Festplatte) warten muss (IO-wait).
  • hi 0.0: Die Zeit, die für das Bearbeiten von Hardware Interrupts verwendet wird
  • si 0.0: Die Zeit, die für das Bearbeiten von Software Interrupts verwendet wird
  • st 0.0: Die Zeit, die von einer virtuellen Maschineauf dem System „gestohlen“ wird (stolen).

4. und 5. Zeile

KiB Mem:  32878736 total, 30528192 used,  2350544 free,   291408 buffers
KiB Swap: 16768892 total,    63940 used, 16704952 free, 28728220 cached

Mem steht für physikalischen Speicher, Swap für Auslagerungen auf der Festplatte. Angezeigt werden die Werte für freien (free) und genutzten (used) Speicher. Der physikalische Speicher wird hier fast komplett genutzt, der Swap eher nicht.

Die Werte für buffers und cached geben die Daten an, die zwischengespeichert werden und müssen prinzipiell vom used Wert noch abgezogen werden. Falls mehr Speicher gebraucht wird, würde Linux diese Bereiche sofort freigeben.

Restliche Zeilen

PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
18935 www-data  20   0  248m  39m 3900 S   9.0  0.1   0:00.27 apache2
18891 www-data  20   0  250m  40m 4016 S   0.7  0.1   0:00.38 apache2
18949 root      20   0 69924 3548 2772 S   0.7  0.0   0:00.02 sshd
31786 mysql     20   0  728m 277m 5308 S   0.7  0.9 947:53.22 mysqld

Die Überschriften kennen Sie grösstenteils schon aus dem ps Artikel

  • PID – Prozess-ID
  • USER – Benutzer, der den Prozess gestartet hat
  • PR – Prioritätsscheduling
  • NI – Nice-Wert
  • VIRT – Der gesamte virtuelle Speicher
  • RES – der physikalische (reservierte) Arbeitsspeicher
  • SHR – der „gesharte“ und „geswappte“ Speicher
  • S – Der Status des Prozesses (D = ununterbrechbarer Schlaf, R = läuft, S = schläft, T = getraced oder gestoppt, Z = Zombie)
  • %CPU – Prozentzahl der CPU-Zeit, die der Prozess verwendet hat
  • %MEM – Prozentzahl des physikalischen Arbeitsspeichers, die der Prozess verwendet hat
  • TIME+ – Die CPU-Zeit, die der Prozess benutzt hat (Minuten:Sekunden.hunderstelSekunden). Der MySQL Prozess benötigt beispielsweise viel CPU Zeit.
  • COMMAND – Der Befehl oder der Name des Prozesses

Top gibt einen wirklich guten ersten Eindruck eines Systems. Da es sich ständig aktualisiert, können Sie es auch laufen lassen und immer mal wieder draufgucken. Die Anzeige kann auch dynamisch verändert werden durch das Drücken verschiedener Tasten (Hot-Keys) – Hier eine Auswahl

  • Z – Färbt die Ausgabe ein
  • i – Idle Prozesse ausblenden
  • P – Sortierung nach CPU-Last
  • M – Sortierung nach Speicherverbrauch
  • N – Sortierung nach PID (numerisch)
  • A – Sortierung nach Alter
  • T – Sortierung nach Zeit
  • U – BENUTZERNAME bzw. UID Zeigt nur die Prozesse des entsprechenden Benutzers an

free

Der Befehl free stellt die Speicherbelegung übersichtlicher dar als top.

             total       used       free     shared    buffers     cached
Mem:      32878736   30603948    2274788          0     291596   28771460
-/+ buffers/cache:    1540892   31337844
Swap:     16768892      63940   16704952

In der zweiten Zeile werden buffers/cache bereits herausgerechnet, so dass man sieht, das der Arbeitsspeicher eigentlich kaum belegt ist und auf jeden Fall ausreicht.

htop

Zusätzlich zu top gibt es noch die Komfortvariante htop.

htop
htop

Hier sind die Daten etwas übersichtlicher aufbereitet und man kann über Funktionstasten die Anzeige konfigurieren.

vmstat

Mit dem Programm vmstat können genauere Werte abgerufen werden, beispielweise die Festplattenstatistik mit dem Parameter -a.

novatrend@server1:~$ vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
0  0  15184 718304 359120 821620    0    0     8    56   84  223  2  1 98  0  0

Mehr Info, siehe http://wiki.ubuntuusers.de/vmstat


tl;dr: Um eine Übersicht über die Auslastung Ihres Servers zu erhalten, benötigen Sie den Befehl top und ein wenig Hintergrundwissen

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!