So überwachen Sie die Systemnutzung, Ausfälle und beheben Fehler bei Linux-Servern – Teil 9
Obwohl Linux sehr zuverlässig ist, sollten kluge Systemadministratoren einen Weg finden, das Verhalten und die Auslastung des Systems jederzeit im Auge zu behalten. Die Sicherstellung einer Betriebszeit von möglichst 100 % und der Verfügbarkeit von Ressourcen sind in vielen Umgebungen entscheidende Anforderungen. Durch die Untersuchung des vergangenen und aktuellen Status des Systems können wir mögliche Probleme vorhersehen und höchstwahrscheinlich verhindern.
Vorstellung des Linux Foundation-Zertifizierungsprogramms
In diesem Artikel stellen wir eine Liste einiger Tools vor, die in den meisten Upstream-Distributionen verfügbar sind, um den Systemstatus zu überprüfen, Ausfälle zu analysieren und laufende Probleme zu beheben. Konkret konzentrieren wir uns bei der Vielzahl verfügbarer Daten auf CPU, Speicherplatz und Arbeitsspeicherauslastung, grundlegendes Prozessmanagement und Protokollanalyse.
Speicherplatznutzung
Unter Linux gibt es zwei bekannte Befehle, mit denen die Speicherplatznutzung überprüft wird: df und du.
Das erste, df (was für disk free steht), wird normalerweise verwendet, um die gesamte Speicherplatznutzung nach Dateisystem zu melden.
Beispiel 1: Berichten der Speicherplatznutzung in Bytes und in einem für Menschen lesbaren Format
Ohne Optionen meldet df die Speicherplatznutzung in Bytes. Mit dem Flag -h werden dieselben Informationen stattdessen in MB oder GB angezeigt. Beachten Sie, dass dieser Bericht auch die Gesamtgröße jedes Dateisystems (in 1-KB-Blöcken), den freien und verfügbaren Speicherplatz sowie den Bereitstellungspunkt jedes Speichergeräts enthält.
# df
df -h
Das ist sicherlich schön – aber es gibt noch eine weitere Einschränkung, die ein Dateisystem unbrauchbar machen kann, und zwar das Fehlen von Inodes. Alle Dateien in einem Dateisystem werden einem Inode zugeordnet, der seine Metadaten enthält.
Beispiel 2: Überprüfen der Inode-Nutzung durch das Dateisystem in einem für Menschen lesbaren Format mit
# df -hTi
Sie können die Anzahl der verwendeten und verfügbaren Inodes sehen:
Gemäß dem obigen Bild gibt es 146 verwendete Inodes (1 %) in /home, was bedeutet, dass Sie immer noch 226 KB große Dateien in diesem Dateisystem erstellen können.
Beispiel 3: Leere Dateien und Verzeichnisse finden und/oder löschen
Beachten Sie, dass Ihnen der Speicherplatz ausgehen kann, lange bevor Ihnen die Inodes ausgehen, und umgekehrt. Aus diesem Grund müssen Sie nicht nur die Speicherplatznutzung überwachen, sondern auch die Anzahl der vom Dateisystem verwendeten Inodes.
Verwenden Sie die folgenden Befehle, um leere Dateien oder Verzeichnisse (die 0B belegen) zu finden, die ohne Grund Inodes verwenden:
# find /home -type f -empty
find /home -type d -empty
Sie können auch das Flag -delete am Ende jedes Befehls hinzufügen, wenn Sie auch diese leeren Dateien und Verzeichnisse löschen möchten:
# find /home -type f -empty --delete
find /home -type f -empty
Beim vorherigen Verfahren wurden 4 Dateien gelöscht. Schauen wir uns noch einmal die Anzahl der genutzten/verfügbaren Knoten in /home an:
# df -hTi | grep home
Wie Sie sehen können, werden jetzt 142 Inodes verwendet (4 weniger als zuvor).
Beispiel 4: Untersuchen der Festplattennutzung nach Verzeichnis
Wenn die Nutzung eines bestimmten Dateisystems über einem vordefinierten Prozentsatz liegt, können Sie mit du (kurz für Disk Usage) herausfinden, welche Dateien den meisten Speicherplatz belegen.
Das Beispiel wird für /var angegeben, das, wie Sie im ersten Bild oben sehen können, zu 67 % genutzt wird.
# du -sch /var/*
Hinweis: Sie können zu jedem der oben genannten Unterverzeichnisse wechseln, um genau herauszufinden, was sich darin befindet und wie viel die einzelnen Elemente belegen. Mithilfe dieser Informationen können Sie dann entweder einige Dateien löschen, wenn sie nicht benötigt werden, oder die Größe des logischen Volumes bei Bedarf erweitern.
Lesen Sie auch
- 12 nützliche „df“-Befehle zum Überprüfen des Speicherplatzes
- 10 nützliche „du“-Befehle zum Ermitteln der Festplattennutzung von Dateien und Verzeichnissen
Speicher- und CPU-Auslastung
Das klassische Tool unter Linux, mit dem eine Gesamtüberprüfung der CPU-/Speicherauslastung und des Prozessmanagements durchgeführt wird, ist top command. Darüber hinaus zeigt top eine Echtzeitansicht eines laufenden Systems an. Es gibt andere Tools, die für den gleichen Zweck verwendet werden könnten, wie zum Beispiel htop, aber ich habe mich für top entschieden, weil es in jeder Linux-Distribution standardmäßig installiert ist.
Beispiel 5: Anzeige eines Live-Status Ihres Systems mit top
Um oben zu beginnen, geben Sie einfach den folgenden Befehl in Ihre Befehlszeile ein und drücken Sie die Eingabetaste.
# top
Sehen wir uns eine typische Top-Ausgabe an:
In den Zeilen 1 bis 5 werden folgende Informationen angezeigt:
1. Die aktuelle Uhrzeit (20:41:32 Uhr) und die Betriebszeit (7 Stunden und 41 Minuten). Es ist nur ein Benutzer am System angemeldet und die durchschnittliche Auslastung während der letzten 1, 5 bzw. 15 Minuten. 0,00, 0,01 und 0,05 geben an, dass das System in diesen Zeitintervallen 0 % der Zeit im Leerlauf war (0,00: keine Prozesse warteten auf die CPU) und anschließend um 1 % überlastet war (0,01: durchschnittlich 0,01 Prozesse). auf die CPU warteten) und 5 % (0,05). Wenn kleiner als 0 und je kleiner die Zahl (z. B. 0,65), war das System während der letzten 1, 5 oder 15 Minuten 35 % im Leerlauf, je nachdem, wo 0,65 erscheint.
2. Derzeit laufen 121 Prozesse (die vollständige Auflistung finden Sie in 6). Nur einer von ihnen läuft (in diesem Fall oben, wie Sie in der Spalte %CPU sehen können) und die restlichen 120 warten im Hintergrund, „schlafen“ aber und bleiben in diesem Zustand, bis wir sie aufrufen. Wie? Sie können dies überprüfen, indem Sie eine MySQL-Eingabeaufforderung öffnen und einige Abfragen ausführen. Sie werden feststellen, wie die Anzahl der laufenden Prozesse zunimmt.
Alternativ können Sie einen Webbrowser öffnen und zu einer beliebigen Seite navigieren, die von Apache bereitgestellt wird. Sie erhalten dann das gleiche Ergebnis. Bei diesen Beispielen wird natürlich davon ausgegangen, dass beide Dienste auf Ihrem Server installiert sind.
3. us (Zeit, die Benutzerprozesse mit unveränderter Priorität ausführt), sy (Zeit, die Kernelprozesse ausführt), ni (Zeit, die Benutzerprozesse mit geänderter Priorität ausführt), wa (Zeit, die auf den Abschluss der E/A wartet), hi (Zeitaufwand für die Bearbeitung von Hardware-Interrupts), si (Zeitaufwand für die Bearbeitung von Software-Interrupts), st (Zeit, die der Hypervisor von der aktuellen VM gestohlen hat – nur in virtualisierten Umgebungen).
4. Physische Speichernutzung.
5. Swap-Speicherplatznutzung.
Beispiel 6: Überprüfung der physischen Speichernutzung
Um die RAM-Speicher- und Swap-Nutzung zu überprüfen, können Sie auch den Befehl free verwenden.
# free
Natürlich können Sie auch die Schalter -m (MB) oder -g (GB) verwenden, um dieselben Informationen in für Menschen lesbarer Form anzuzeigen:
# free -m
In jedem Fall müssen Sie sich der Tatsache bewusst sein, dass der Kernel so viel Speicher wie möglich reserviert und ihn Prozessen zur Verfügung stellt, wenn diese ihn anfordern. Insbesondere zeigt die Zeile „-/+ buffers/cache“ die tatsächlichen Werte an, nachdem dieser I/O-Cache berücksichtigt wurde.
Mit anderen Worten, die Menge an Speicher, die von Prozessen verwendet wird, und die Menge, die anderen Prozessen zur Verfügung steht (in diesem Fall 232 MB verwendet bzw. 270 MB verfügbar). Wenn Prozesse diesen Speicher benötigen, verringert der Kernel automatisch die Größe des I/O-Cache.
Lesen Sie auch: 10 nützliche „kostenlose“ Befehle zum Überprüfen der Linux-Speichernutzung
Prozesse genauer betrachten
Auf unserem Linux-System laufen zu jeder Zeit viele Prozesse. Es gibt zwei Tools, mit denen wir Prozesse genau überwachen werden: ps und pstree.
Beispiel 7: Anzeige der gesamten Prozessliste in Ihrem System mit ps (vollständiges Standardformat)
Durch die Kombination der Optionen -e und -f (-ef) können Sie alle Prozesse auflisten, die derzeit auf Ihrem System ausgeführt werden. Sie können diese Ausgabe an andere Tools wie grep weiterleiten (wie in Teil 1 der LFCS-Serie erläutert), um die Ausgabe auf Ihre gewünschten Prozesse einzugrenzen:
# ps -ef | grep -i squid | grep -v grep
Die Prozessliste oben zeigt die folgenden Informationen:
Eigentümer des Prozesses, PID, übergeordnete PID (der übergeordnete Prozess), Prozessorauslastung, Zeitpunkt des Befehlsstarts, tty (das ? zeigt an, dass es sich um einen Daemon handelt), die kumulierte CPU-Zeit und der mit dem Prozess verknüpfte Befehl.
Beispiel 8: Anpassen und Sortieren der Ausgabe von ps
Möglicherweise benötigen Sie jedoch nicht alle diese Informationen und möchten den Eigentümer des Prozesses, den Befehl, der ihn gestartet hat, seine PID und PPID sowie den Prozentsatz des aktuell verwendeten Speichers anzeigen – in dieser Reihenfolge und sortiert nach Speichernutzung in absteigender Reihenfolge (beachten Sie, dass ps standardmäßig nach PID sortiert ist).
# ps -eo user,comm,pid,ppid,%mem --sort -%mem
Wobei das Minuszeichen vor %mem die Sortierung in absteigender Reihenfolge anzeigt.
Wenn ein Prozess aus irgendeinem Grund beginnt, zu viele Systemressourcen zu beanspruchen und die Gesamtfunktionalität des Systems zu gefährden droht, sollten Sie seine Ausführung stoppen oder pausieren, indem Sie mithilfe des Kill-Programms eines der folgenden Signale an ihn senden. Andere Gründe, warum Sie dies in Betracht ziehen würden, sind, wenn Sie einen Prozess im Vordergrund gestartet haben, ihn aber anhalten und im Hintergrund fortsetzen möchten.
Signal name | Signal number | Description |
SIGTERM | 15 | Kill the process gracefully. |
SIGINT | 2 | This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it. |
SIGKILL | 9 | This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it. |
SIGHUP | 1 | Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process. |
SIGTSTP | 20 | Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination. |
SIGSTOP | 19 | The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted. |
SIGCONT | 18 | This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands. |
Beispiel 9: Die Ausführung eines laufenden Prozesses anhalten und im Hintergrund fortsetzen
Wenn die normale Ausführung eines bestimmten Prozesses bedeutet, dass während der Ausführung keine Ausgabe an den Bildschirm gesendet wird, können Sie ihn entweder im Hintergrund starten (durch Anhängen eines kaufmännischen Und-Zeichens am Ende des Befehls).
process_name &
oder,
Sobald es im Vordergrund ausgeführt wird, pausieren Sie es und senden Sie es mit in den Hintergrund
Ctrl + Z
# kill -18 PID
Beispiel 10: Erzwungenes Beenden eines Prozesses, der „wild geworden“ ist
Bitte beachten Sie, dass jede Distribution Tools zum ordnungsgemäßen Stoppen/Starten/Neustarten/Neuladen allgemeiner Dienste bereitstellt, wie z. B. service in SysV-basierten Systemen oder systemctl in systemd-basierten Systemen.
Wenn ein Prozess nicht auf diese Dienstprogramme reagiert, können Sie ihn gewaltsam beenden, indem Sie ihm das SIGKILL-Signal senden.
# ps -ef | grep apache
kill -9 3821
Also... Was ist passiert/passiert?
Wenn es zu einem Ausfall im System gekommen ist (sei es ein Stromausfall, ein Hardwarefehler, eine geplante oder ungeplante Unterbrechung eines Prozesses oder eine andere Anomalie), werden die Protokolle in /var/log sind Ihre besten Freunde, um herauszufinden, was passiert ist oder was die Ursache für die Probleme sein könnte, mit denen Sie konfrontiert sind.
# cd /var/log
Einige der Elemente in /var/log sind normale Textdateien, andere sind Verzeichnisse und wieder andere sind komprimierte Dateien rotierter (historischer) Protokolle. Sie sollten diejenigen überprüfen, deren Name das Wort „Error“ enthält, aber es kann auch nützlich sein, den Rest zu überprüfen.
Beispiel 11: Protokolle auf Fehler in Prozessen untersuchen
Stellen Sie sich dieses Szenario vor. Ihre LAN-Clients können nicht auf Netzwerkdruckern drucken. Der erste Schritt zur Behebung dieser Situation besteht darin, in das Verzeichnis /var/log/cups zu gehen und zu sehen, was sich dort befindet.
Sie können den Befehl tail verwenden, um die letzten 10 Zeilen der Datei „error_log“ anzuzeigen, oder tail -f error_log für eine Echtzeitansicht des Protokolls.
# cd /var/log/cups
ls
tail error_log
Der obige Screenshot enthält einige hilfreiche Informationen, um zu verstehen, was die Ursache Ihres Problems sein könnte. Beachten Sie, dass das Befolgen der Schritte oder das Korrigieren der Fehlfunktion des Prozesses möglicherweise immer noch nicht das Gesamtproblem löst. Wenn Sie sich jedoch von Anfang an daran gewöhnen, jedes Mal, wenn ein Problem auftritt (sei es ein lokales oder ein Netzwerkproblem), die Protokolle zu überprüfen Ich werde auf jeden Fall auf dem richtigen Weg sein.
Beispiel 12: Untersuchen der Protokolle auf Hardwarefehler
Obwohl die Fehlerbehebung bei Hardwarefehlern schwierig sein kann, sollten Sie die dmesg- und Nachrichtenprotokolle sowie grep auf verwandte Wörter zu einem vermutlich fehlerhaften Hardwareteil überprüfen.
Das Bild unten stammt aus /var/log/messages, nachdem mit dem folgenden Befehl nach dem Wort „error“ gesucht wurde:
# less /var/log/messages | grep -i error
Wir können sehen, dass wir ein Problem mit zwei Speichergeräten haben: /dev/sdb und /dev/sdc, was wiederum ein Problem mit dem RAID-Array verursacht.
Abschluss
In diesem Artikel haben wir einige Tools untersucht, die Ihnen dabei helfen können, stets über den Gesamtstatus Ihres Systems informiert zu sein. Darüber hinaus müssen Sie sicherstellen, dass Ihr Betriebssystem und die installierten Pakete auf die neuesten stabilen Versionen aktualisiert sind. Und vergessen Sie niemals, die Protokolle zu überprüfen! Dann sind Sie auf dem richtigen Weg, um für jedes Problem die endgültige Lösung zu finden.
Fühlen Sie sich frei, Ihre Kommentare, Vorschläge oder Fragen – falls Sie welche haben – über das untenstehende Formular zu hinterlassen.