strace ja perf: Linuxi tõrkeotsingu spikkerileht
13 min lugemine - 4. juuni 2026

Millal kasutada strace vs perf Linuxis, milliseid käske te tegelikult käivitate ja kuidas hoida koormatud tootmisserveri silumiseks vajalikud kulud madalad.
strace ja perf Linuxi veaotsinguks
Kui Linuxi server on aeglane, kukub kokku või koormab liigselt protsessorit ning rakenduse logid ei selgita põhjust, aitavad kaks tööriista enamiku probleemidest lahendada. strace ütleb sulle, mida protsess kernelilt küsib. perf näitab, kuhu CPU kulutab oma aega. Koos vastavad need küsimustele „miks see on kinni jäänud” ja „mida see teeb”, mida miski muu nii odavalt ei suuda lahendada.
See postitus käsitleb, millal iga tööriista kasutada, kuidas neid installida, milliseid käske tegelikult käivitada ja kuidas hoida koormust reaalajas töötaval serveril hallatavana.
Millal kasutada strace'i ja millal perf'i
Erinevus on lihtne. Kasutage perf kui CPU on hõivatud ja teil on vaja teada, milline funktsioon selle eest vastutab. Kasutage strace kui protsess on hangunud, kukub kokku, annab kummalisi vigu või käitub viisil, mida logid ei seleta.
perf võtab proove tuuma riistvaralugemitest seadistatava sagedusega, seega on koormus tavaliselt alla 1% ja seda on ohutu tootmiskeskkonnas käivitada. strace püüab kinni iga süsteemikõne läbi ptrace, mis võib sihtprotsessi aeglustada 10–100 korda. Kasutage seda live-süsteemides mõõdukalt ja alati koos filtritega.
| Sümptom | Alusta | Järgige |
|---|---|---|
| Kõrge CPU koormus | perf top või perf record -g | strace -c kuum protsess |
| Aeglane kettaseade või I/O ooteaeg | perf stat vahemälust puudumise tõttu | strace -e trace=file |
| Protsessi hangumine või vaikne viga | strace -e trace=file,network | perf stat et välistada CPU koormus |
| Lukustuse konflikt või aeglane API | strace -c, jälgige futex | perf record -g |
Strace ja perfi installimine
Mõlemad tööriistad on standardvaramutes. strace tugineb ptrace syscall-ile, mis on juba aastaid olnud osa igast kaasaegsest tuumast. perf kasutab perf_events liidest ja vajab teie käivitatud tuumaga sobivat paketti.
sudo apt install strace linux-tools-common linux-tools-$(uname -r)
RHEL-is, AlmaLinuxis või Fedoras:
sudo dnf install strace perf
Bit $(uname -r) bit on oluline. Teise tuumaversiooni jaoks koostatud perf-binaar annab segadust tekitava väljundi ja võib sündmusi märkamatult välja jätta. Kontrollige käskudega perf --version ja strace -V pärast installimist.
Selleks, et perf kuvaks funktsiooninimesid kuueteistkümnendkoodi aadresside asemel, on vaja silumissümboleid. Paigaldage asjakohane -dbg või -debuginfo pakett (näiteks libc6-dbg Debianis) ning kompileerige oma binaarid -g GCC-s.
Konteinerite sees strace vajab --cap-add=SYS_PTRACE ja perf vajab --cap-add=SYS_ADMIN Dockeriga käivitamisel. Ilma nendeta ebaõnnestuvad tööriistad viisil, mis näeb välja nagu vead.
Süsteemikutsete jälgimine strace'iga
Käivitamine strace command jälgib protsessi alates käivitamisest. Käimasoleva protsessiga ühendamiseks kasutage strace -p PID. Mitmeprotsessiliste või harunevate protsesside puhul lisage -f , et jälgida protsessi järglasi, vastasel juhul jääb enamik tegevustest märkamata.
Väljundread lõpevad tagastatud väärtusega. -1 ENOENT tähendab, et protsessi poolt küsitud faili pole olemas. -1 EACCES tähendab õigusi. Need kaks viga moodustavad üllatavalt suure osa tootmisveadest.
Kõige kasulikum lipuk on -e trace=GROUP, mis piirab väljundit nimetatud süsteemikõne kategooriaga ja hoiab müra kontrolli all.
| Rühm | kõned | Milleks see hea on |
|---|---|---|
file | openat, stat, read, write | Puuduvad konfiguratsioonid, õiguste vead, aeglane sisend-väljund |
network | socket, connect, bind, recvfrom | Ühendus keelatud, DNS-vead, TLS-probleemid |
process | execve, clone, wait4 | Krahhid, fork-tormid, puuduvad binaarid |
futex | futex | Lukustuse konfliktid ja niidite seiskumised |
Hõivatud serveril alusta strace -c -p PID kümne või kahekümne sekundi jooksul. -c lipu abil kuvatakse ühenduse katkestamisel kokkuvõte süsteemikutsete arvust, koguaeg ja vead. See näitab, millist kategooriat tasub lähemalt uurida, ilma et terminali üle ujutataks. Seejärel ühendage uuesti kitsa filtri abil.
Muud teadmiseks väärt lipud: -T logib iga kutsumise kestuse, -Z näitab ainult ebaõnnestunud kutsumisi ja -o file kirjutab logisse terminali asemel, mis on palju kiirem müraka protsessi puhul.
CPU profiili koostamine perfiga
perf-il on neli käsku, mida kasutate enamasti.
| Käsk | Mida see teeb | Tavalised lipud |
|---|---|---|
perf stat | Loendurite hetkeseis: tsüklid, vahemälust möödalöögid, konteksti vahetused | -e, -p, -a |
perf top | Reaalajas ülevaade süsteemi kõige aktiivsemate funktsioonide kohta | --sort comm,dso,symbol |
perf record | Salvestab näidised perf.data offline-analüüsiks | -F, -g, -p |
perf report | Loeb perf.data, järjestab funktsioone proovide osakaalu järgi | --stdio, --sort |
Alusta perf stat -p PID , et saada kiire ülevaade. Jälgida tuleks järgmisi näitajaid:
- IPC (käskude arv tsükli kohta) alla 1,0: CPU seisab, tavaliselt mälupöördumise tõttu.
- Kõrge LLC-load-misside arv: töökogum ei mahu vahemällu, mistõttu CPU ootab RAM-i.
- Kõrge konteksti vahetuste arv: tüüpiline I/O-piiranguga töökoormuste puhul, kus niidid blokeerivad pidevalt kettal või võrgus.
Kui midagi tundub vale, vaadake järgnevalt perf record -F 99 -g -p PID -- sleep 30. -F 99 võtab proove sagedusega 99 Hz, mis on piisav kuumade funktsioonide leidmiseks ja vältib sünkroniseerimist tuuma ajastiga ümmargustel sagedustel nagu 100 Hz. Lip -g lipu abil salvestatakse kutsugraafikud, nii et perf report saab näidata, millised funktsiooni sisenemisteed on selle eest vastutavad.
Veerus perf reportOn veerus „Overhead” näidatud osakaal koguarvust. Suur koormus _int_malloc või memcpy tähendab suurt mälueraldust. Suur lisakulu ühes teie enda funktsioonidest ongi see probleemne koht, mida te otsisite.
Kui näete funktsiooninimede asemel kuueteistkümnendadresse, on binaar failist eemaldatud või puuduvad silumissümbolid. Paigaldage sobiv -dbg pakett või koosta binaar uuesti -g.
Praktiline töövoog reaalajas töötaval serveril
Tegelikul juhtumil hõivatud serveril näeb rutiin välja järgmine:
- Kinnitage sümptom esmalt odavate vahenditega:
top,vmstat,iostat. Kui kasutate virtuaalmasinat, kontrollige veerusst(steal) veergu. Kui näit on üle 5%, tähendab see, et pudelikaelaks on hüperviisor, mitte teie kood. - Kui CPU koormus on kõrge, käivita
perf topmõne sekundi jooksul, seejärelperf record -F 99 -g -p PID -- sleep 30probleemsele protsessile. 30-sekundiline salvestus sagedusega 99 Hz toodab umbes 1,7 MB andmeid. - Kui protsess on hangunud, aeglane või annab vigu, käivita
strace -c -p PIDkümme sekundit ja lugege kokkuvõtet. Kui üks süsteemikõne kategooria domineerib, kitsendage valikut käsugastrace -e trace=GROUP -T -p PID. - Kui olete leidnud kahtlase süsteemikõne või funktsiooni, katkestage ühendus. Ärge jätke kumbagi tööriista tootmiskeskkonnas kauem töötama, kui vaja.
Kaks hoiatust. strace väljund võib sisaldada keskkonnamuutujaid, failide asukohti ja pistikupesadest loetud baiti, seega puhastage logid enne nende jagamist väljaspool oma meeskonda. Ja kui kavatsete seda regulaarselt teha, vaadake bpftrace ja laiemat eBPF-tööriistakomplekti järgmise sammuna: sama tüüpi nähtavus, alla 1% lisakoormus, algusest peale tootmiskeskkonnale loodud.
Kui teie töökoormused nõuavad põhjalikku diagnostilist juurdepääsu ja jagatud infrastruktuur ei ole võimalik, vaadake meie pühendatud servereid.

FDC VPS on standardselt varustatud NVMe-ketaste, EPYC-protsessoritega ja tõeliselt piiramatu ribalaiusega. Kas olete valmis uuendama?
Avage jõudlus nüüdMiks on oluline, et VPS oleks võimas ja mittemeterdatud
Mõõtmiseta VPS annab kindlasummalise ribalaiuse fikseeritud portikiirusega. Kuidas see erineb mõõdetavatest pakettidest, millal see tasub ära ja mida enne ostmist kontrollida.
7 min lugemine - 9. mai 2025
Linuxi mäluhaldus: Swap, OOM Killer & Cgroups
12 min lugemine - 31. mai 2026

Kas teil on küsimusi või vajate kohandatud lahendust?
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt