strace și perf: foaie de instrucțiuni pentru depanarea Linux
13 min citire - 4 iunie 2026

Când să folosiți strace vs perf pe Linux, comenzile pe care le veți executa de fapt și cum să păstrați cheltuielile generale scăzute atunci când depanați un server de producție aglomerat.
strace și perf pentru depanarea Linux
Când un server Linux este lent, se blochează sau consumă excesiv CPU, iar jurnalele aplicației nu explică de ce, două instrumente acoperă cea mai mare parte a lacunelor. strace vă spune ce solicită un proces de la kernel. perf vă spune unde își petrece timpul procesorul. Împreună, ele răspund la întrebările „de ce s-a blocat” și „ce face”, pe care nimic altceva nu le gestionează la un cost atât de redus.
Acest articol prezintă când să apelați la fiecare instrument, cum să le instalați, comenzile pe care le veți rula efectiv și cum să mențineți un nivel acceptabil de încărcare pe un server activ.
Când să folosiți strace vs perf
Diferența este simplă. Utilizați perf când CPU-ul este ocupat și trebuie să știți care funcție este responsabilă. Folosiți strace când un proces se blochează, se prăbușește, returnează erori ciudate sau se comportă într-un mod pe care jurnalele nu îl explică.
perf eșantionează contoarele hardware ale kernelului la o frecvență configurabilă, astfel încât suprasarcina este de obicei sub 1% și este sigur de rulat în producție. strace interceptează fiecare apel de sistem prin ptrace, ceea ce poate încetini procesul țintă de 10 până la 100 de ori. Folosiți-l cu moderație pe sistemele active și întotdeauna cu filtre.
| Simptom | Începeți cu | Continuați cu |
|---|---|---|
| Utilizare ridicată a procesorului | perf top sau perf record -g | strace -c pe procesul intens |
| Așteptare lentă a discului sau I/O | perf stat pentru erori de cache | strace -e trace=file |
| Blocarea procesului sau eroare silențioasă | strace -e trace=file,network | perf stat pentru a exclude presiunea asupra procesorului |
| Conflict de blocare sau API lent | strace -c, fii atent la futex | perf record -g |
Instalarea strace și perf
Ambele instrumente se găsesc în depozitele standard. strace se bazează pe ptrace syscall, care face parte din fiecare kernel modern de ani de zile. perf utilizează perf_events și are nevoie de un pachet compatibil cu kernel-ul pe care îl rulați.
sudo apt install strace linux-tools-common linux-tools-$(uname -r)
Pe RHEL, AlmaLinux sau Fedora:
sudo dnf install strace perf
Bitul $(uname -r) bit contează. Un binar perf compilat pentru o versiune diferită de kernel produce rezultate confuze și poate omite evenimente fără avertisment. Verificați cu perf --version și strace -V după instalare.
Pentru ca perf să afișeze numele funcțiilor în loc de adrese hexazecimale, aveți nevoie de simboluri de depanare. Instalați fișierul relevant -dbg sau -debuginfo (de exemplu, libc6-dbg pe Debian) și compilați-vă propriile fișiere binare cu -g în GCC.
În interiorul containerelor, strace este nevoie --cap-add=SYS_PTRACE și perf necesită --cap-add=SYS_ADMIN la lansarea cu Docker. Fără aceste limite, instrumentele eșuează în moduri care par a fi bug-uri.
Urmărirea apelurilor de sistem cu strace
Rularea strace command tracează un proces de la lansare. Pentru a vă atașa la un proces care rulează, utilizați strace -p PID. Pentru orice proces multi-threaded sau care se bifurcă, adăugați -f pentru a urmări procesele secundare, altfel veți pierde cea mai mare parte a activității.
Liniile de ieșire se termină cu o valoare de returnare. -1 ENOENT înseamnă că fișierul solicitat de proces nu există. -1 EACCES înseamnă permisiuni. Aceste două erori reprezintă, ele singure, o proporție surprinzător de mare din bug-urile de producție.
Cel mai util indicator este -e trace=GROUP, care limitează ieșirea la o categorie de apeluri de sistem numită și menține zgomotul la un nivel gestionabil.
| Grup | Include apeluri | La ce este bun |
|---|---|---|
file | openat, stat, read, write | Configurații lipsă, erori de permisiuni, I/O lent |
network | socket, connect, bind, recvfrom | Conexiune refuzată, eșecuri DNS, probleme TLS |
process | execve, clone, wait4 | Blocări, furtuni de fork-uri, binare lipsă |
futex | futex | Conflicte de blocare și blocaje ale thread-urilor |
Pe un server aglomerat, începeți cu strace -c -p PID timp de zece sau douăzeci de secunde. -c afişează un rezumat al numărului de apeluri de sistem, al timpului total şi al erorilor atunci când vă deconectaţi. Asta vă arată ce categorie merită o analiză mai atentă fără a inunda terminalul. Apoi reconectaţi-vă cu un filtru mai restrâns.
Alte opțiuni utile: -T înregistrează timpul petrecut în fiecare apel, -Z afișează doar apelurile eșuate și -o file scrie într-un jurnal în loc de terminal, ceea ce este mult mai rapid într-un proces zgomotos.
Profilarea CPU cu perf
perf are patru comenzi pe care le veți folosi cel mai des.
| Comandă | Ce face | Indicatori obișnuiți |
|---|---|---|
perf stat | Instantaneu al contoarelor: cicluri, erori de cache, schimbări de context | -e, -p, -a |
perf top | Vizualizare în timp real a celor mai solicitate funcții din sistem | --sort comm,dso,symbol |
perf record | Capturează eșantioane perf.data pentru analiză offline | -F, -g, -p |
perf report | Citește perf.data, clasează funcțiile în funcție de ponderea eșantionului | --stdio, --sort |
Începeți cu perf stat -p PID pentru o prezentare generală rapidă. Cifrele de urmărit:
- IPC (instrucțiuni pe ciclu) sub 1,0: CPU-ul se blochează, de obicei la accesarea memoriei.
- Număr mare de erori de încărcare LLC: setul de lucru nu încape în cache, așa că procesorul așteaptă RAM-ul.
- Număr mare de comutări de context: tipic pentru sarcinile de lucru legate de I/O, în care thread-urile se blochează continuu pe disc sau în rețea.
Dacă ceva pare în neregulă, continuați cu perf record -F 99 -g -p PID -- sleep 30. -F 99 eșantionează la 99 Hz, ceea ce este suficient pentru a găsi funcțiile active și evită sincronizarea cu temporizatorul kernelului la numere rotunde precum 100 Hz. -g Capturează graficele de apeluri, astfel încât perf report să vă poată arăta care căi de acces către o funcție sunt responsabile.
În perf report, coloana Overhead reprezintă ponderea din totalul eșantioanelor. Un overhead ridicat în _int_malloc sau memcpy înseamnă o alocare intensă. Un overhead ridicat într-una dintre funcțiile dvs. este punctul fierbinte pe care îl căutați.
Dacă vedeți adrese hex în loc de nume de funcții, binarul este decompilat sau lipsesc simbolurile de depanare. Instalați pachetul -dbg sau recompilați fișierul binar cu -g.
Un flux de lucru practic pe un server live
Pentru un incident real pe un server aglomerat, rutina arată astfel:
- Confirmați mai întâi simptomul cu instrumente ieftine:
top,vmstat,iostat. Dacă vă aflați pe o mașină virtuală, verificați coloanastcoloana (steal). Orice valoare peste 5% înseamnă că hipervizorul este gâtul de sticlă, nu codul tău. - Dacă CPU-ul este ridicat, rulați
perf toptimp de câteva secunde, apoiperf record -F 99 -g -p PID -- sleep 30pentru procesul care cauzează problema. O captură de 30 de secunde la 99 Hz produce aproximativ 1,7 MB de date. - Dacă procesul este blocat, lent sau returnează erori, rulați
strace -c -p PIDtimp de zece secunde și citiți rezumatul. Dacă o categorie de apeluri de sistem domină, restrângeți căutarea custrace -e trace=GROUP -T -p PID. - Când ați găsit apelul de sistem sau funcția suspectă, deconectați-vă. Nu lăsați niciunul dintre instrumente să ruleze în mediul de producție mai mult decât este necesar.
Două avertismente. strace ieșirea poate include variabile de mediu, căi de fișiere și octeți citiți din socluri, așa că curățați jurnalele înainte de a le partaja în afara echipei. Și dacă intenționați să faceți acest lucru în mod regulat, luați în considerare bpftrace și la setul de instrumente eBPF mai cuprinzător ca următorul pas: același tip de vizibilitate, suprasarcină sub 1%, construit pentru producție încă de la început.
Dacă rulați sarcini de lucru în care accesul la diagnosticare aprofundată este important și infrastructura partajată nu este o opțiune, aruncați o privire la serverele noastre dedicate.

VPS-urile FDC vin cu unități NVMe, procesoare EPYC și lățime de bandă cu adevărat nemăsurată ca standard. Sunteți gata să faceți upgrade?
Eliberați performanța acumDe ce este important să aveți un VPS puternic și nemeditat
Un VPS neevaluat oferă o lățime de bandă forfetară la o viteză fixă a portului. Cum diferă de planurile cu contorizare, când merită și ce trebuie să verificați înainte de cumpărare.
7 min citire - 9 mai 2025
Managementul memoriei în Linux: Swap, OOM Killer și Cgroups
12 min citire - 31 mai 2026

Aveți întrebări sau aveți nevoie de o soluție personalizată?
Opțiuni flexibile
Acoperire globală
Implementare instantanee
Opțiuni flexibile
Acoperire globală
Implementare instantanee