strace
strace hilft dabei, die Funktionsaufrufe einzelner Prozesse oder des gesamten Systems zu protokollieren (System Calls). Die dabei enstehenden Ausgaben werden „Traces“ genannt.
Im einfachsten Fall führt strace den angegebenen Befehl aus, bis er beendet wird. Es fängt die Systemaufrufe ab und protokolliert Aufrufe, die von einem Prozess aufgerufen werden, inklusive die Signale, die ein Prozess empfängt. Der Name jedes Systemaufrufs, dessen Argumente und Rückgabewert werden auf STDERR oder in die mit der Option -o angegebene Datei geschrieben.
So lässt sich für Programmierer und SysAdmins nachvollziehen, was zu einem Fehler oder Abbruch führt. Wiederholte Einträge in den Traces weisen auf mögliche Race Conditions und Deadlocks hin.
dnf -y install strace
Ein einfacher Aufruf:
strace myapp
Laufenden Prozess untersuchen:
strace -p $PID
System-Call-Aufrufe zählen:
strace -c myapp
Ausführlicheres Tracing:
# debug an already-running/existing process
strace -ffttTo /tmp/strace.out -p $PID
# start the program "myapp" and debug it immediately
strace -ffttTo /tmp/strace.out myapp
Bedeutet:
-p
: Verbindet sich mit dem Prozess mit der Prozess-ID und startet das Tracing.-ff
: Untersucht auch die Kindprozesse, die von den aktuell überwachten Prozessen erstellt werden. Wenn die Option -o mit angegeben, wird das Tracing-Ergebnis in filename.pid geschrieben.-tt
: Stellt dem Log-Output die Uhrzeit voran (durch -tt einschliesslich Mikrosekunden).-o
: Trace-Output in Datei schreiben.-T
: Dauer der Systemaufrufe protokollieren.
Nachher lassen sich die Dateien untersuchen:
cat /tmp/strace.out*
Mehrere parallele, dynamisch erzeugte php-fpm tracen (siehe auch https://sleeplessbeastie.eu/2019/10/14/how-to-strace-php-fpm-processes/):
strace -s 1024 -o /tmp/strace.out -ff $(pgrep php-fpm | paste -s | sed -e 's/\([0-9]\+\)/-p \1/g' -e 's/\t/ /g')
Tipp
ltrace
protokolliert Bibliotheksaufrufe (Library Calls) statt System-Aufrufe.
Built on 2024-11-18