Kapitel 6

Diagnose

IN DIESEM KAPITEL

  • Informationen über den Server sammeln
  • Lasten verteilen
  • Fehlermeldungen auswerten und umleiten
  • Netzwerke überwachen

Arbeitsspeicher und Swapping

Der Befehl free sagt Ihnen, wie viel Arbeitsspeicher, also RAM, zur Verfügung steht und wie die Swap-Partition ausgelastet ist. Er gibt Auskunft über die Ausstattung des Systems mit RAM, dessen Verwendung und die Situation der Swap-Partition.

$ free
gesamt belegt frei gemeinsam Zwischen verfügbar
Speicher: 7988428 1184816 1521176 288256 5282436 6211664
Auslager: 2097148 768 2096380

Wenn Sie die großen Zahlen nicht so gut lesen können, hilft die Option -h. Das h steht für human.

$ free -h
gesamt belegt frei gemeinsam Zwischen verfügbar
Speicher: 7,6Gi 1,1Gi 1,5Gi 281Mi 5,0Gi 5,9Gi
Auslager: 2,0Gi 0,0Ki 2,0Gi

Dieser Computer ist mit 8 GByte RAM ausgestattet. Davon sind scheinbar nur knapp 1,5 GByte frei. Das sollte Sie nicht beunruhigen. Hauptspeicher ist eine zu wertvolle Ressource, als dass sie ein ordentliches Betriebssystem einfach achtlos herumliegen lässt. Alles, was die Prozesse nicht zum Laufen benötigen, wird sofort in Puffer für die Festplattenzugriffe gesteckt.

Wenn Sie wissen wollen, ob dieser Computer eine schwache Speicherausstattung hat, ist der Blick auf die Zeile mit dem Swap (Auslager) viel interessanter. Von der 2 GByte großen Swap-Partition werden gerade mal ein paar Bytes belegt. Es ist also genügend Hauptspeicher vorhanden, sodass kein Prozess ausgelagert werden muss.

Und selbst wenn Sie feststellen, dass Ihr Server eine höhere Belegung hat, ist das noch kein Grund zur Unruhe. Wenn der Server längere Zeit läuft, werden beispielsweise selten benötigte Hintergrundprozesse durchaus in den Swap-Bereich ausgelagert. Dort liegen sie warm und trocken und stören nicht. Erst wenn sich die Belegung des Swaps laufend verändert, wird der Hauptspeicher offensichtlich zum knappen Gut.

Wie geht es der Festplatte?

Mit dem Befehl df (siehe Abschnitt 7) gewinnen Sie eine Übersicht über die Festplatte. Sie sehen, welche Dateisysteme wo eingehängt sind und ob sie voll sind.

$ df
Dateisystem 1K-Blöcke Benutzt Verfügbar Verw% Eingehängt auf
udev 3946644 0 3946644 0% /dev
tmpfs 798844 1928 796916 1% /run
/dev/sda4 66708084 22721636 40552096 36% /
tmpfs 3994212 172 3994040 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 3994212 0 3994212 0% /sys/fs/cgroup
/dev/sda1 98304 29581 68723 31% /boot/efi
/dev/sda6 563114912 423195360 111241408 80% /home
tmpfs 798840 44 798796 1% /run/user/1000

Auch hier hilft die Option -h, wenn es nur um die grobe Übersicht geht.

$ df -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
udev 3,8G 0 3,8G 0% /dev
tmpfs 781M 1,9M 779M 1% /run
/dev/sda4 64G 22G 39G 36% /
tmpfs 3,9G 172K 3,9G 1% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
/dev/sda1 96M 29M 68M 31% /boot/efi
/dev/sda6 538G 404G 107G 80% /home
tmpfs 781M 44K 781M 1% /run/user/1000

Festplatten, die zu voll werden, haben übrigens einen schlechten Einfluss auf die Performance, zumindest bei magnetischen Datenträgern.

Wie war der Start?

Der Befehl dmesg liefert die Meldungen, die beim Start des Systems entstanden sind. Die Meldungen sind so umfangreich, dass es sich lohnt, sie mit einer Pipe dem Programm more zuzuführen:

$ dmesg | more

Sie erhalten Informationen darüber, welcher Kernel gebootet wurde, welche Speicher-Map vorhanden ist, welche CPU-Architektur vorgefunden wurde und welche Besonderheiten mit einem Patch behandelt werden. Es geht weiter mit den Besonderheiten des Motherboards, des ACPI und der PCI. Sie erfahren Details über das Grafiksystem und viele Dinge mehr, die Sie gar nicht wissen wollten.

Diese Flut von Informationen ist nichts für Oma Puvogel als Abendlektüre. Aber sie enthält vor allem dann wichtige Hinweise, wenn etwas nicht rund läuft. Auch wenn Sie sich spontan überfordert fühlen, sollten Sie hin und wieder hineinschauen. Mit der Zeit verstehen Sie immer mehr. Außerdem kann man mit diesen Ausgaben jemanden schwer beeindrucken, der vielleicht für die Gehaltserhöhungen der Administratoren zuständig ist.

Die Last mit der Last

»Die Maschine ist in letzter Zeit etwas langsam« ist eine der häufigsten Äußerungen von Computeranwendern. Bevor Sie jedoch die geistige Windstille durch hektische Aktivität ersetzen, sollten Sie einige Werkzeuge zurate ziehen, die diese Aussage verifizieren.

Prozesshitparade: top

Für den Administrator sind gerade die Prozesse von besonderem Interesse, die die Maschine sehr belasten. Das Programm top liefert eine Hitparade der anstrengendsten Prozesse.

top - 22:05:42 up 2 days, 20:40, 4 users, load average: 0.01, 0.11, 0.07
Tasks: 207 total, 1 running, 206 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.3%us, 1.3%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1800480k total, 1728564k used, 71916k free, 64328k buffers
Swap: 7815580k total, 24k used, 7815556k free, 999356k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6023 arnold 20 0 1353m 263m 21m S 4 15.0 144:09.66 java
1944 root 20 0 185m 100m 10m S 2 5.7 37:21.41 Xorg
2820 arnold 20 0 536m 27m 14m S 1 1.6 0:11.63 nautilus
2816 arnold 20 0 153m 12m 9016 S 0 0.7 6:07.40 metacity
22153 root 20 0 10960 1268 880 R 0 0.1 0:00.14 top
1 root 20 0 8348 736 604 S 0 0.0 0:01.70 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0 0.0 0:00.02 migration/0
4 root 20 0 0 0 0 S 0 0.0 0:01.50 ksoftirqd/0
5 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0
6 root RT 0 0 0 0 S 0 0.0 0:00.04 migration/1
7 root 20 0 0 0 0 S 0 0.0 0:00.68 ksoftirqd/1
8 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/1
9 root 20 0 0 0 0 S 0 0.0 0:00.05 events/0
10 root 20 0 0 0 0 S 0 0.0 0:00.10 events/1
11 root 20 0 0 0 0 S 0 0.0 0:00.00 cpuset
12 root 20 0 0 0 0 S 0 0.0 0:00.00 khelper

Die erste Zeile zeigt, was Ihnen auch der Befehl uptime liefert: Wie lange läuft der Server schon und welche Last hat er? Die load average zeigt drei Mal die Last, zunächst diejenige der letzten Minute, dann der letzten fünf und schließlich der letzten 15 Minuten.

Weiter unten finden Sie die Informationen, die Sie von free kennen, die über den derzeitigen Speicherbedarf Auskunft geben.

Wie erwähnt, ist die Bewegung das Interessante. Sie sehen, wie die Last steigt oder fällt und welche Prozesse dafür verantwortlich zeichnen. Mit der Größer- und der Kleinertaste können Sie die Hitparadenreihenfolge zwischen CPU- und Speicherbelastung hin- und herschalten.

Sollten Sie einen der Prozesse beenden wollen, können Sie mit der Taste das kill-Kommando auslösen. Sie werden daraufhin nach der PID und der Signalnummer gefragt. Zum Thema finden Sie weitere Informationen im Kapitel 1.

Die Taste zeigt Ihnen noch einige weitere Möglichkeiten, wie Sie top an Ihre Bedürfnisse anpassen können.

Belastungs-EKG mit vmstat

Sollten Sie nähere Informationen über die Ursache der Maschinenauslastung benötigen, ist der Befehl vmstat ein praktischer Helfer. Er liefert eine ausführlichere Zeile mit Informationen über die Prozesse, die Speicherauslastung, den Datenumsatz und die CPU-Last.

Sie können als Argument eine 3 übergeben, dann wird alle drei Sekunden eine solche Zahl ausgegeben, bis der Strom ausfällt oder Sie den Vorgang mit + wieder unterbrechen. Mit einer weiteren Zahl können Sie die Anzahl der Wiederholungen festlegen.

$ vmstat 10
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 52836 22796 1493332 0 0 1898 153 435 837 37 3 53 8
1 0 0 52904 22856 1495224 0 0 4741 433 1052 1471 50 2 47 1
1 0 0 53304 22976 1493924 0 0 4904 393 1003 1751 51 2 44 3
1 0 0 54136 23056 1492804 0 0 4523 671 988 1483 49 2 47 2
1 0 0 51972 23116 1495012 0 0 4382 720 956 1457 49 2 48 2
2 0 0 52688 23180 1494060 0 0 4920 328 1042 1476 48 2 48 2
1 0 0 54420 23220 1491548 0 0 5086 319 1026 1503 49 2 48 2
1 0 0 53048 23292 1492656 0 0 4702 385 1005 1507 48 2 48 2
1 0 0 53352 23340 1492468 0 0 4920 465 1025 1453 49 1 49 2
1 0 0 53380 23384 1492588 0 0 4228 502 1022 2280 49 2 46 3
2 0 0 54468 24024 1478864 0 0 4545 279 1039 1924 50 3 30 17
2 0 0 51440 24164 1481356 0 0 4482 400 875 1346 94 2 0 4
3 0 0 54916 24252 1476184 0 0 4288 481 875 1330 94 2 0 4
3 0 0 53380 24328 1477812 0 0 3622 663 857 1302 94 2 0 4
2 0 0 54336 24396 1472992 0 0 4064 452 891 1393 94 2 0 4
2 0 0 51620 25024 1473228 0 0 5063 423 876 1356 77 3 1 20
2 0 0 53388 25232 1476360 0 0 4236 638 799 1175 95 3 0 3
2 0 0 53056 25404 1475648 0 0 4227 521 821 1247 94 3 0 3
2 0 0 51408 25628 1474972 0 0 4317 584 929 1627 95 3 0 2
1 0 0 51360 25756 1491084 0 0 4276 512 1010 1705 68 2 27 2

Schauen wir auf die einzelnen Spalten der Messung.

  • procs: Hier wird die Zahl der Prozesse aufgezählt. Dabei stehen unter r (running) diejenigen, die laufbereit auf die Zuteilung von Laufzeit warten, also im Schedulingprozess stehen. Unter b (blocking) stehen diejenigen, die ununterbrechbar schlafen.
  • memory: Die Speicheranzeige unterscheidet den ausgelagerten Swap-Speicher swpd, den frei zur Verfügung stehenden Speicher (free) sowie denjenigen, der als Puffer (buff) beziehungsweise als Cache (cache) verwendet wird.
  • swap: In diesem Bereich sehen Sie die Bewegung, also wie viele Seiten von der Festplatte eingelagert (si) und wie viele Seiten ausgelagert werden (so).
  • io: Der Bereich zeigt an, wie viele Blöcke der Datenträger gelesen (bi) beziehungsweise geschrieben (bo) wurden.
  • system: Hier werden die Interrupts pro Sekunde (in) und die Kontextwechsel pro Sekunde (cs) angezeigt.
  • cpu: Unter dieser Überschrift wird die Verteilung der CPU-Last aufgeschlüsselt. Die Werte der vier Spalten ergeben zusammen 100. Die erste Spalte us für »user« ist die Zeit, während der die Anwendung selbst die CPU belegt. Die Systemzeit (sy) bezeichnet den Bereich, den die Verwaltung benötigt. Idle (id) bezeichnet die Langeweile der CPU. Und Wait (wa) meint die Zeit, die Prozesse für die Ausführung ihrer I/O-Wünsche aufwenden.

Dieser Mitschnitt zeigt eine Maschine, auf der ein bis drei Prozesse aktiv sind. Speicher steht in Hülle und Fülle zur Verfügung. Es ist eine gewisse I/O-Last feststellbar. Vor allem wird die CPU stark belastet. Solange nur ein Prozess läuft, steigt die User-Last auf knapp 50 %. Erst bei Eintritt des zweiten Prozesses steigt die Belastung auf knapp 100 % und Idle ist beinahe 0. Dies ist für einen Server ein sehr ungewöhnliches Verhalten. Des Rätsels Lösung ist, dass es sich um eine Zweikern-CPU handelt. Einer der Prozesse konvertierte eine Videodatei, der andere übersetzte ein -Dokument. Da beide Programme kein Multithreading unterstützen, wurde der zweite Kern erst dadurch aktiv, dass der Scheduler die Prozesse auf beide Kerne verteilte.

Mit der Option -t können Sie einen Timestamp mitführen. Dann können Sie den Befehl im Hintergrund mitlaufen lassen. Sie können so feststellen, wann hohe Last aufgetreten ist.

Der Syslog-Dämon und die Protokolldatei

Linux hat syslog als einen Standard-Fehlerdienst an Bord, den Programmierer so einfach verwenden können, dass sie gar nicht erst in die Versuchung kommt, eine eigene Lösung zu stricken. Davon profitiert der Administrator. Alle Fehler kommen durch diese hohle Gasse und können nach zwei Kriterien unterschieden werden:

  • Wie schwerwiegend ist der Fehler?
  • Wer hat den Fehler ausgelöst?

Der Administrator kann konfigurieren, wo sie abgelegt werden sollen, und das sogar quer über das Netzwerk.

Seit einigen Jahren heißt der Syslog-Dämon rsyslog. Die Konfigurationsdatei heißt /etc/rsyslog.conf beziehungsweise befindet sich im Verzeichnis /etc/rsyslog.d. Die Verteilung erfolgt normalerweise in der Datei 50-default.conf.

auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
mail.err /var/log/mail.err

Eine normale Zeile besteht aus einem Selektor, der bestimmt, welche Fehlermeldungen betroffen sind, und einer Aktion, die vorgibt, wie die Fehlermeldung zu behandeln ist.

Der Selektor und die Aktion werden durch ein oder mehrere Leerzeichen voneinander getrennt. Der Selektor setzt sich aus der Herkunft (facility, siehe Tabelle 6.1) und der Priorität (level, siehe Tabelle 6.2) der Fehlermeldung zusammen. Beides wird durch einen Punkt getrennt. Es können mehrere Selektoren zu einem kombiniert werden, indem sie durch ein Komma voneinander getrennt werden. Sowohl facility als auch level können durch einen Stern ersetzt werden, der besagt, dass dieser Bereich keiner Einschränkung unterliegt.

facility

Herkunft

kern

der Kernel

user

Anwendungsprogramme

mail

das Mailing-System

daemon

Systemhintergrundprozesse

auth

Autorisierungsprobleme

lpr

Druckerprobleme

news

der News-Server

uucp

UUCP (Unix to Unix Copy)

cron

der cron-Dämon

mark

Zeitstempelmeldungen

local0local7

frei für Anwendungsprogramme verfügbar

*

Alle

Tabelle 6.1: Herkunftsbeschreibung in der Konfiguration von rsyslog

level

Bedeutung

emerg

Notfall, wilde Panik

alert

Alarmzustand

crit

kritischer Fehler

warning

Warnung, aber kein Drama

notice

freundlicher Hinweis

info

Nur zur Information

debug

Programmierernotizen bei der Entwicklung

Tabelle 6.2: Schwere des Fehlers in fallender Gewichtung

Aktion

Auf den Selektor folgt die Aktion. Diese besteht meist in der Ausgabe in eine Datei, etwa /var/log/syslog. Der Administrator kann auch mehrere Ziele angeben, die durch Kommata getrennt werden.

  • Dateiausgabe: Eine Datei wird immer mit vollem Pfad angegeben. Darum muss das erste Zeichen einer Datei immer ein Schrägstrich sein. Die entsprechenden Dateien müssen nach dem Eintrag angelegt werden. Der Syslog-Dämon kann nämlich keine Dateien erzeugen.
  • Terminals oder Konsolen: Die Fehlermeldungen können auch auf Konsolen umgeleitet werden. Dazu werden die Gerätedateien der Konsolen angegeben.
  • Netzwerkhosts: Fehler können auch über das Netzwerk an andere Syslog-Dämonen fremder Maschinen übergeben werden. Dazu wird vor dem Zielrechner ein @ angegeben. Der Zielrechner kann über seine IP-Adresse oder den Hostnamen angegeben werden.
  • Verwerfen: Als Discard-Zeichen wird die Tilde verwendet. Steht in der Aktion ein solches Zeichen, werden die durch den Selektor angegebenen Fehler verworfen. Damit können nervige Fehlermeldungen direkt entsorgt werden.

Einträge in einer Syslog-Datei

Aus den Einträgen der Datei 50-default.conf wird deutlich, dass die Protokolldateien standardmäßig im Verzeichnis /var/log liegen. Insbesondere die Datei syslog ist interessant. Kernel-Fehler dürften eher selten auftreten und Mails werden je nach Schwere in mail.log oder mail.err abgelegt.

In der Datei /var/log/syslog finden Sie alle Ereignisse historisch sortiert. Jeder der Einträge belegt eine Zeile. Das Schema der Einträge lautet:

Monat Tag Uhrzeit Hostname Programm: Meldung

Dazwischen stehen jeweils Leerzeichen.