Strace-Befehle zur Fehlerbehebung bei Linux-Prozessen

Wenn wir unter unserer Verantwortung Maschinen mit Linux-Betriebssystemen haben, ist eine der nützlichsten und praktischsten Möglichkeiten, jeden Aspekt davon richtig zu verwalten, die verschiedenen Dienstprogramme und Befehle zu kennen, die es gibt, um sie bereitzustellen und zu unterstützen.

Dieses Mal wird Solvetic über ein Befehlszeilen-Dienstprogramm namens strace sprechen und wir werden sehen, wie es für die Betriebssystemadministration praktisch werden kann.

Was ist stracestrace ist ein nützliches Befehlszeilentool zum Diagnostizieren, Anweisen und Ausführen von Debugging-Aufgaben. Systemadministratoren finden strace ein praktisches Werkzeug, um Probleme mit Programmen zu lösen, für die die Quelle nicht verfügbar ist, da sie nicht neu kompiliert werden müssen, um sie zu verfolgen.
Das strace-Tool erfasst und zeichnet alle von einem Prozess getätigten Systemaufrufe und die vom Prozess empfangenen Signale auf. strace ist dafür verantwortlich, den Namen jedes Systemaufrufs zusammen mit seinen Argumenten in Klammern und seinem Rückgabewert auf Standardfehler anzuzeigen, optional, es wird möglich sein, es in eine Datei umzuleiten.

1. Strass-Installation


Um strace zu installieren, müssen wir einen der folgenden Befehle ausführen:
 sudo apt install strace (Debian oder Ubuntu) yum install strace (RedHat oder CentOS) dnf install strace (Fedora)
Falls ein Programm abstürzt oder sich unerwartet verhält, ist es möglich, auf die Systemaufrufe zuzugreifen, um eine Vorstellung davon zu bekommen, was genau während seiner Ausführung passiert ist.

Systemaufrufe können in verschiedene Ereignisse eingeteilt werden: solche im Zusammenhang mit der Prozessverwaltung, solche, die eine Datei als Argument annehmen, solche, die Netzwerke, Speicherzuweisung, Signale, IPC und auch Systemaufrufe im Zusammenhang mit Dateideskriptoren betreffen.

2. So beheben Sie Prozessprobleme in Linux mit strace-Befehlen


Als nächstes werden wir verschiedene strace-Befehle sehen, um die verschiedenen Prozessprobleme zu lösen, die in Linux auftreten können.

Systemaufrufe mit strace verfolgenDiese Option ermöglicht es uns, alle Systemaufrufe des df-Befehls zu verfolgen, dazu führen wir Folgendes aus:

 strace df -h

In dieser Ausgabe können wir verschiedene Arten von Systemaufrufen sehen, die vom Befehl df ausgeführt werden. Einer davon ist beispielsweise:

 offen ("/etc/ld.so.cache", O_RDONLY | O_CLOEXEC) = 3
Wo:
  • Offen: Dies ist die Art des Systemaufrufs
  • Es ist das Argument des Systemaufrufs: "/etc/ld.so.cache", O_RDONLY | O_CLOEXEC
  • 3: Es ist der Rückgabewert des Systemaufrufs

Verfolgen Sie Linux-PID-ProzesseWenn bereits ein Prozess auf dem System läuft, kann er wie folgt über seine PID verfolgt werden:

 sudo strace -c -p 465
Dadurch wird der Bildschirm mit der kontinuierlichen Ausgabe gefüllt, die anzeigt, dass die Systemaufrufe vom Prozess getätigt werden. Zum Abschluss drücken wir die Tasten Strg + C.

Holen Sie sich die Zusammenfassung eines Linux-ProzessesMit dem Parameter -c ist es möglich, für jeden Systemaufruf einen Bericht über die Gesamtzeit, Aufrufe und Fehler zu erstellen. Dazu führen wir die folgende Syntax aus:

 sudo strace -c -p (PID)

Befehlszeiger während des Systemaufrufs drucken. Die Option -i zeigt den Anweisungszeiger bei jedem Systemaufruf des Programms an.

 sudo strace -i df -h

Tageszeit für jede Trace-Ausgabezeile anzeigenMit strace ist es möglich, die Uhrzeit für jede Zeile in der Trace-Ausgabe mit dem Flag -t auszugeben:

 sudo strace -t df -h

Anzeige der für Systemaufrufe aufgewendeten DruckzeitUm den Zeitunterschied zwischen dem Anfang und dem Ende jedes Systemaufrufs eines Programms anzuzeigen, müssen wir die Option -T verwenden:

 sudo strace -T df -h

Verfolgen Sie bestimmte AnrufeDer Befehl trace = write wird als qualifizierter Ausdruck bezeichnet, wobei trace ein Qualifizierer ist (andere sind Signal, Abkürzung, Verbose, Raw, Read oder Write). In diesem Fall geben Sie den Wert des Qualifizierers ein. Der folgende Befehl zeigt in Echtzeit die Systemaufrufe an, um die df-Ausgabe in die Standardausgabe zu drucken:

 sudo strace -e trace = schreibe df -h

Einige zusätzliche Befehle, die wir verwenden können, sind:

 sudo strace -e trace = öffnen, schließen df -hsudo strace -e trace = öffnen, schließen, lesen, schreiben df -hsudo strace -e trace = alle df -h

Zeichnen von Systemaufrufen basierend auf einer BedingungDieser Befehl kann verwendet werden, um alle Systemaufrufe zu verfolgen, die das Prozessmanagement betreffen. Wir führen Folgendes aus:

 sudo strace -q -e trace = Prozess df -h

Um nun alle Systemaufrufe zu verfolgen, die einen Dateinamen als Argument annehmen, führen wir den folgenden Befehl aus:

 sudo strace -q -e trace = Datei df -h

Um alle Systemaufrufe zu verfolgen, die eine Speicherzuweisung beinhalten, führen wir die folgende Zeile aus:

 sudo strace -q -e trace = Speicher df -h

Trace zur Ausgabedatei umleitenWenn wir die Folgenachrichten, die an einen Standardfehler gesendet werden, in eine Datei schreiben möchten, verwenden wir die Option -o. Dies bedeutet, dass nur die Befehlsausgabe wie folgt auf dem Bildschirm ausgegeben wird:

 sudo strace -o df_debug.txt df -h

Wir können diese Datei visualisieren, indem wir die Zeile ausführen:

 Katze df_debug.txt

strace-Debug-Ausgabe bereitstellenWenn wir die Debugging-Informationen für das strace-Tool anzeigen möchten, müssen wir das Flag -d verwenden:

 strace -d df -h

Strace-HilfeUm die Hilfe des strace-Befehls anzuzeigen, führen wir die folgende Zeile aus:

 Mann strace

Auf diese Weise haben wir gesehen, wie strace zu einer weiteren Hilfe für Verwaltungsaufgaben in Linux-Distributionen wird.

wave wave wave wave wave