← retour aux snippets

strace: profiler syscalls, latences et erreurs

Tracer les appels système (-f -tt -T) d'un process, mesurer les latences et identifier EAGAIN/EINTR.

bash monitoring #strace#syscalls#latency

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

  • -tt ajoute des timestamps absolus; -T mesure la durée de chaque syscall.
  • attention aux performances et à la volumétrie des traces; utilisez -o fichier.
  • complétez avec perf record/perf top pour le profilage CPU.