II Lokale Probleme
4. Grundlagen Linux
Ein paar Grundlagen benötige ich immer wieder, wenn ich die Vorgänge in einem Linux-System verstehen will.
Von diesen halte ich im Zusammenhang mit Fehlersuche für besonders wichtig:
- die Bedeutung von Dateien und Verzeichnissen bei UNIX und Linux
- das UNIX-Prozessmodell
- die Schnittstellen über die ein Prozess mit seiner Umgebung interagiert
Darauf gehe ich in den folgenden Abschnitten ein.
5. Totalausfall
Ein Totalausfall bedeutet für mich zuallererst: der Rechner selbst ist keine Hilfe bei der Fehlersuche. Das muss nicht heißen, dass der Rechner überhaupt nicht mehr reagiert, aber auf jeden Fall stehen mir nicht alle Werkzeuge zur Verfügung, die ich sonst zur Analyse einsetzen könnte.
Ich betrachte die folgenden Probleme als Totalausfall eines Rechners.
- Hardwarefehler, der Rechner reagiert überhaupt nicht beim Einschalten. Abgesehen von dem Tipp, den Stromanschluss zu überprüfen, gehe ich darauf hier nicht weiter ein.
- Boot-Probleme, zwar passiert etwas, die Hardware scheint größtenteils in Ordnung, aber das Betriebssystem wird nicht gestartet. Ich analysiere den Bootprozess Schritt für Schritt, beobachte, wie weit das System kommt und versuche die Ursache zu ermitteln.
- Einfrieren, der Rechner war normal gestartet, hat eine Zeit lang gearbeitet, aber jetzt reagiert er nicht mehr. Ich versuche zunächst den Rechner mit Magic SysRequest geordnet neu zu starten und nachträglich zu analysieren. Falls möglich, werte ich die mit SysRequest gewonnenen Erkenntnisse aus.
- Überlast, Swapping, Thrashing. Ich sehe oder höre, dass der Rechner intensiv arbeitet. Trotzdem reagiert er sehr langsam. Auf Grund von Timeouts kann ich mich nicht einmal mehr anmelden, in einer Shell bekomme ich kein Programm gestartet. Wenn ich die Last nicht auf anderem Weg vom Rechner nehmen kann, bleibt mir nur, den Rechner neu zu starten. Anschließend versuche ich zu ermitteln, was die Überlast ausgelöst hatte.
- Ausfälle bei virtuellen Maschinen.
Das sind die gleichen Fehler wie bei “echten” Maschinen aus Blech.
Hinzu kommen Probleme mit der Virtualisierungsschicht.
Im Gegenzug bekomme ich mehr Diagnosemöglichkeiten an die Hand.
Neben dem Totalausfall des Gastsystems gibt es noch die Möglichkeit, das das Wirtssystem ausgefallen ist. Diesen Fehler behandle ich, wie oben beschrieben.
Bei den Gastsystemen sind meine Optionen abhängig von der verwendeten Virtualisierungslösung und deren Werkzeugen zur Diagnose. Manchmal kann ich einfach die Festplattenpartitionen des Gastsystems im Hostsystem oder einem anderen Gastsystem einhängen und dort untersuchen. Damit stehen mir zusätzliche Werkzeuge zur Verfügung.
6. Partieller Ausfall
Bei einem teilweisen Ausfall auf einem Server sind nur einzelne Dienste des Systems betroffen. Dann steht mir, im Gegensatz zum Totalausfall, meist die gesamte Vielfalt an Werkzeugen zur Diagnose zur Verfügung.
Bevor ich mich wegen eines Problems an einem Server anmelde, habe ich bereits einige Informationen gesammelt.
- Wie äußert sich das Problem?
- Wann wurde es zuerst bemerkt?
- Ist es reproduzierbar?
- Gibt es zeitliche Muster?
- Sind alle betroffen oder nur ein Teil der Nutzer?
Damit habe ich schon eine gewisse Vorstellung, wonach ich schauen werde, wenn ich mich anmelde.
7. Performance des Rechners
Der Rechner funktioniert zwar, aber alles erscheint zäh und in Zeitlupe abzulaufen. Jobs brauchen eine gefühlte Ewigkeit, die Tastatur scheint mit 8 Baud angeschlossen. Irgendwo sind Engpässe, aber wo?
Oft ist es einfach nur eine Überlast, das heißt, das System erhält temporär mehr Aufgaben, als es bewältigen kann. Dann werde ich zunächst alles tun, um die Last zu reduzieren. Anschließend mache ich mir Gedanken, wie ich die zu erwartende Last bewältigen kann.
Die drei wesentlichen Engpässe beim Betrieb eines Rechners sind CPU,
Hauptspeicher und I/O.
Welcher von diesen drei im Moment gerade den Betrieb hemmt, bekomme ich sehr
schnell mit dem Befehl vmstat heraus.
Damit weiß ich allerdings erst, wo ich suchen will, die eigentliche Ursache
muss ich noch ermitteln.
Mit dem Programm top kann ich etwas genauer hinschauen.
Je nach dem, was ich mit vmstat herausbekommen habe, kann ich interaktiv mit
P die Prozesse nach prozentualer Nutzung der CPU und mit M nach der
prozentualen Nutzung des Speichers sortieren lassen.
Mit 1 zeigt das Programm in den Kopfzeilen für jede einzelne CPU an, wie sie
ihre Zeit verbringt.
Mit f, gefolgt von j und <Enter> zeigt das Programm in einer
zusätzlichen Spalte, welcher Prozess auf welcher CPU läuft.
Wenn ich es ganz genau wissen will, erstelle ich ein Lastprofil meines Systems mit Accounting-Software wie sysstat. Zwar belastet diese das System zusätzlich, doch ich kann die Ergebnisse meiner Analyse dann nutzen, um gezielt in neue Hardware zu investieren, ein oder mehrere leistungsstärkere Prozessoren, mehr RAM, schnellere Festplatten und Netzwerkkarten. Oder ich verteile die Last auf mehrere Systeme.
Als Einführung in das Gebiet empfehle ich Loukides1996, das mittlerweile in neuer Auflage erschien.
8. Werkzeuge zur lokalen Fehlersuche
Linux stellt mir eine Unmenge an Werkzeugen für die Fehlersuche zur Verfügung. Etliche davon kommen mir sowohl bei Total- als auch bei Partialausfällen zu gute. Andere bei Performanceproblemen. Einige sind so nützlich, dass ich sie immer wieder bei den unterschiedlichsten Problemen einsetze.
Da es mir schwerfällt, die einzelnen Werkzeuge bestimmten Kategorien zuzuordnen, stelle ich sie nachfolgend in alphabetischer Reihenfolge vor. Das erleichtert zumindest das Wiederfinden, wenn ich nur etwas nachschlagen möchte.