Depanarea Apelurilor de Sistem în Timp Real cu strace în Linux / Bash

Procese și monitorizare Standard Linux

Ghid complet pentru depanarea aplicațiilor în Linux cu strace: interceptarea apelurilor de sistem (syscalls), diagnosticarea proceselor blocate și identificarea fișierelor lipsă.

Sintaxă comandă
strace -p 4812 -e trace=openat,read,write -s 200 -T -tt

Adesea un program compilat, un binar terț sau un script Python eșuează fără niciun mesaj clar în loguri (sau îngheață la nesfârșit consumând resurse). În loc să ghicești ce face procesul în culise, comanda strace interceptează și afișează toate apelurile de sistem (system calls) pe care programul le transmite nucleului Linux (deschidere fișiere, alocare memorie, scrieri în socket-uri de rețea).

1. Aflarea cauzei pentru care o comandă eșuează la pornire
# Rulăm un binar sub strace și filtrăm doar apelurile legate de fișiere:
strace -e trace=openat,access php script.php

# Output-ul dezvăluie exact fișierele căutate:
# openat(AT_FDCWD, "/etc/php/8.4/cli/php.ini", O_RDONLY) = 3
# openat(AT_FDCWD, "/var/www/.env", O_RDONLY) = -1 ENOENT (No such file or directory)
# -> Am descoperit instantaneu că programul căuta fișierul '.env' care lipsea de pe disc!

2. Atașarea la un Proces de Producție Blocat (-p PID)

Dacă un proces existent (de exemplu un worker cu PID 4512) nu mai răspunde la cereri, vă puteți atașa direct la el fără a-l reporni:

Diagnosticarea unui proces agățat în fundal
# -p 4512 : ID-ul procesului urmărit
# -T      : Afișează timpul exact (în secunde) petrecut în interiorul fiecărui apel de sistem
# -tt     : Adaugă timestamp cu microsecunde la fiecare linie
# -s 200  : Mărește lungimea șirurilor afișate la 200 caractere (pentru a vedea căile complete)

sudo strace -p 4512 -T -tt -s 200

# Dacă vedeți:
# 18:20:15.123456 read(5, ... ) = ? ERESTARTSYS (sau rămâne blocat aici)
# Procesul este blocat pe descriptorul de fișier numărul 5!
# Verificați cu 'lsof -p 4512' ce reprezintă descriptorul 5 (de regulă un socket de rețea fără timeout configurat).

Opțiuni Utile în strace

  • -f: Urmărește automat și toate procesele sau thread-urile copil lansate prin fork() / clone().
  • -c: Mod sumar statistic: colectează apelurile și afișează la final un tabel agregat cu numărul total de apeluri, procentul de timp și erorile survenite per syscall.