Firmenbrief

19.10.2011

Interessante Linux-Tools für Systemadministratoren - Heute: strace


Im letzten Teil unserer Artikelserie für Admins haben wir uns mit Hilfe des Linux-Tools lsof angesehen, welche Dateien und Verbindungen ein Prozess momentan offen hält. Doch das Betrachten von offenen Dateien oder bestehenden Verbindungen ist nur ein kleiner Teil der Prozessanalyse; viel interessanter ist es zu erfahren, was für Aktionen ein Programm im Hintergrund ausführt.

Mit Hilfe des Debugging-Tools strace ist es uns möglich, genau diese Informationen zu erlangen. Wie ein Beobachter klinkt sich strace in die Kommunikation zwischen Applikation und Betriebssystem-Kernel und und zeigt, was der ausgewählte Prozess in diesem Moment macht. So können Sie beispielsweise herausfinden, warum sich eine Anwendung „aufhängt" oder lange Antwortzeiten benötigt.

Für den leichten Einstieg nutzen wir strace als „Ersatz" für lsof und sehen uns ebenfalls zunächst nur geöffnete Dateien an:

strace -p 12345 -f -e trace=open

Bitte ersetzen Sie 12345 durch die PID des Prozesses, den Sie sich genauer ansehen möchten.

Sollte der Prozess mit der PID 12345 Dateien offen halten, so wird Ihnen strace nun die entsprechenden Pfad- und Dateinamen anzeigen. Hat der Prozess hingegen keine Datei geöffnet, so erhalten Sie auch keine Ausgabe.

Sie können nun warten, bis der betroffene Prozess beendet wird oder sich mit [Strg] + [c] aus der Kommunikation ausklinken.

Wer noch mehr über einen Prozess erfahren möchte, lässt den Filter „-e trace=open" einfach weg und blickt auf alle Abläufe:

strace -p 12345 -f

Achtung: Selbst simple Prozesse zeigen in strace eine sehr hohe Aktivität - wundern Sie sich daher nicht, wenn der Bildschirm schnell mit neuem Leben gefüllt wird, wenn Sie strace verwenden.

Natürlich können Sie die Ausgabe von strace auch in eine Datei umleiten:

strace -p 12345 -o /tmp/strace_test

Mit dem Parameter -o teilen Sie strace mit, wohin die Ausgabe geschrieben werden soll. Auch hier können Sie die Beobachtung des Prozesses jederzeit mit [Strg] + [c] beenden.

Wenn Sie mit strace keinen laufenden Prozess beobachten, sondern die Ausführung eines Stücks Software von Anfang bis Ende mitverfolgen möchten, können Sie strace einfach mit dem gewünschten Kommando aufrufen.

Ein Beispiel: strace -f ping google.de

Der Schalter -f bewirkt übrigens, dass strace auch den Childs (also Kindprozessen) des Prozesses folgt - somit entgeht uns nicht das geringste Detail, während wir auf dem Beobachtungsposten sitzen.

strace bietet noch eine Fülle weiterer Optionen und ist deshalb weltweit zum wohl beliebtesten Debugger avanciert. Wenn Sie möchten, können Sie sich mit dem Kommando man strace über das Tool schlau machen. Probieren Sie es einfach mal aus!