objectif
Comprendre où un programme passe son temps en espace noyau: I/O lentes, timeouts, erreurs de syscalls.
code minimal
# tracer un PID existant
sudo strace -f -tt -T -s 120 -p "$PID"
# ou démarrer et tracer une commande
sudo strace -f -tt -T -s 120 -o strace.log -- your_command --flag
utilisation
# repérer les appels > 1 ms
awk '/<([0-9]+\.[0-9]{6})>/{ if ($0 ~ /<([0-9]+\.[0-9]{6})>/) { m=substr($0, match($0, /<([0-9]+\.[0-9]{6})>/)+1); gsub(/>|</,"",m); if (m+0 > 0.001) print } }' strace.log | head
# compter les syscalls les plus coûteux
awk -F'[<>]' '/</{ sum[$1]+= $2 } END{ for(k in sum) printf "%.3f s %s\n", sum[k], k }' strace.log | sort -nr | head
variante(s) utile(s)
# limiter aux I/O fichiers et réseaux
sudo strace -f -e trace=file,network -p "$PID"
# filtrer par résultat d'erreur
sudo strace -f -e fault=all -p "$PID"
notes
-ttajoute des timestamps absolus;-Tmesure la durée de chaque syscall.- attention aux performances et à la volumétrie des traces; utilisez
-o fichier. - complétez avec
perf record/perf toppour le profilage CPU.