strace a perf: Tahák pro řešení problémů v Linuxu

13 min čtení - 4. června 2026

hero section cover
Obsah
  • strace a perf pro řešení problémů v systému Linux
  • Kdy použít strace a kdy perf
  • Instalace strace a perf
  • Sledování systémových volání pomocí strace
  • Profilování CPU pomocí perf
  • Praktický pracovní postup na živém serveru
Sdílet

Kdy použít strace vs. perf v Linuxu, jaké příkazy skutečně spustíte a jak udržet nízkou režii při ladění vytíženého produkčního serveru.

strace a perf pro řešení problémů v systému Linux

Když je linuxový server pomalý, padá nebo přetěžuje procesor a aplikační logy nevysvětlují proč, dva nástroje pokryjí většinu mezer. strace strace vám řekne, o co proces žádá jádro. perf vám řekne, kde CPU tráví svůj čas. Společně odpovídají na otázky „proč se to zaseklo“ a „co to dělá“, které nic jiného nezvládne tak levně.

Tento příspěvek se zabývá tím, kdy sáhnout po kterém nástroji, jak je nainstalovat, jaké příkazy budete skutečně spouštět a jak udržet režii na živém serveru pod kontrolou.


 

Kdy použít strace a kdy perf

Rozdíl je jednoduchý. Použijte perf , když je CPU zaneprázdněno a potřebujete zjistit, která funkce je za to zodpovědná. Použijte strace , když proces zamrzá, havaruje, vrací podivné chyby nebo se chová způsobem, který logy nevysvětlují.

perf vzorkuje hardwarové čítače jádra s konfigurovatelnou frekvencí, takže režie je obvykle pod 1 % a je bezpečné jej spouštět v produkčním prostředí. strace zachytává každé systémové volání prostřednictvím ptrace, což může zpomalit cílový proces 10x až 100x. Používejte jej na živých systémech jen zřídka a vždy s filtry.

PříznakZačněte sPokračujte
Vysoké využití CPUperf top nebo perf record -gstrace -c na proces s vysokým zatížením
Pomalý disk nebo čekání na I/Operf stat kvůli chybám cachestrace -e trace=file
Zablokování procesu nebo tichá chybastrace -e trace=file,networkperf stat k vyloučení zatížení CPU
Konflikty zámků nebo pomalé APIstrace -c, sledujte futexperf record -g

Instalace strace a perf

Oba nástroje jsou v standardních repozitářích. strace využívá ptrace syscall, který je již řadu let součástí každého moderního jádra. perf využívá rozhraní perf_events rozhraní a vyžaduje balíček, který odpovídá vašemu spuštěnému jádru.

Na Ubuntu nebo Debianu:

sudo apt install strace linux-tools-common linux-tools-$(uname -r)

Na RHEL, AlmaLinux nebo Fedora:

sudo dnf install strace perf

Na $(uname -r) bit je důležitý. Binární soubor perf sestavený proti jiné verzi jádra produkuje matoucí výstup a může tiše vynechávat události. Ověřte pomocí perf --version a strace -V po instalaci.

Aby perf zobrazoval názvy funkcí namísto hexadecimálních adres, potřebujete ladicí symboly. Nainstalujte příslušný -dbg nebo -debuginfo (například libc6-dbg v Debianu) a zkompilujte si vlastní binární soubory pomocí -g v GCC.

Uvnitř kontejnerů strace potřebuje --cap-add=SYS_PTRACE a perf potřebuje --cap-add=SYS_ADMIN při spouštění s Dockerem. Bez těchto omezení selhávají nástroje způsobem, který vypadá jako chyby.

Sledování systémových volání pomocí strace

Spuštění strace command sleduje proces od jeho spuštění. Chcete-li se připojit k běžícímu procesu, použijte strace -p PID. U všeho, co je multithreadové nebo se rozvětvuje, přidejte -f , abyste sledovali potomky, jinak vám unikne většina aktivity.

Výstupní řádky končí návratovou hodnotou. -1 ENOENT znamená, že soubor, o který proces požádal, neexistuje. -1 EACCES znamená oprávnění. Tyto dvě chyby samy o sobě představují překvapivě velký podíl chyb v produkčním prostředí.

Nejužitečnější příznak je -e trace=GROUP, která omezuje výstup na pojmenovanou kategorii systémových volání a udržuje množství výstupu na přijatelné úrovni.

SkupinaZahrnuté voláníK čemu to slouží
fileopenat, stat, read, writeChybějící konfigurace, chyby oprávnění, pomalé I/O
networksocket, connect, bind, recvfromOdmítnutí připojení, selhání DNS, problémy s TLS
processexecve, clone, wait4Zhavarování, bouře vidlic, chybějící binární soubory
futexfutexKonflikty zámků a zablokování vláken

Na vytíženém serveru začněte s strace -c -p PID na deset nebo dvacet sekund. Příznak -c příkaz vypíše souhrn počtu systémových volání, celkového času a chyb při odpojení. To vám řekne, kterou kategorii stojí za to prozkoumat blíže, aniž by se terminál zaplavil daty. Poté se znovu připojte s úzkým filtrem.

Další příznaky, které stojí za to znát: -T zaznamenává čas strávený v každém volání, -Z zobrazí pouze neúspěšná volání a -o file zapisuje do logu místo do terminálu, což je u hlučného procesu mnohem rychlejší.

Profilování CPU pomocí perf

perf má čtyři příkazy, které budete používat nejčastěji.

PříkazCo děláBěžné příznaky
perf statSnímek čítačů: cykly, chyby cache, přepínání kontextu-e, -p, -a
perf topŽivý náhled nejvyužívanějších funkcí v systému--sort comm,dso,symbol
perf recordZachycuje vzorky perf.data pro offline analýzu-F, -g, -p
perf reportČte perf.data, řadí funkce podle podílu vzorků--stdio, --sort

Začněte s perf stat -p PID pro rychlý přehled. Čísla, na která je třeba dávat pozor:

  • IPC (instrukce na cyklus) pod 1,0: CPU se zdržuje, obvykle při přístupu k paměti.
  • Vysoký počet LLC-load-misses: pracovní sada se nevejde do cache, takže CPU čeká na RAM.
  • Vysoký počet přepnutí kontextu: klasický případ pro úlohy vázané na I/O, kde vlákna neustále blokují disk nebo síť.

Pokud se něco nezdá, pokračujte pomocí perf record -F 99 -g -p PID -- sleep 30. -F 99 vzorkuje na 99 Hz, což stačí k nalezení nejvyužívanějších funkcí a vyhýbá se synchronizaci s časovačem jádra na kulatých číslech, jako je 100 Hz. Příznak -g zachytí grafy volání, takže perf report vám může ukázat, které cesty do funkce jsou za to zodpovědné.

Ve perf reportsloupci Overhead je uveden podíl na celkovém počtu vzorků. Vysoká režie v _int_malloc nebo memcpy znamená velkou alokaci. Vysoká režie v jedné z vašich vlastních funkcí je tím problémovým místem, které jste hledali.

Pokud vidíte hexadecimální adresy namísto názvů funkcí, je binární soubor zbaven symbolů nebo chybí ladicí symboly. Nainstalujte odpovídající -dbg balíček nebo přeložte binární soubor s -g.

Praktický pracovní postup na živém serveru

V případě skutečné události na vytíženém serveru vypadá postup takto:

  1. Nejprve potvrďte příznak pomocí jednoduchých nástrojů: top, vmstat, iostat. Pokud používáte virtuální stroj, zkontrolujte sloupec st sloupec (steal). Hodnota nad 5 % znamená, že úzkým hrdlem je hypervisor, nikoli váš kód.
  2. Pokud je využití CPU vysoké, spusťte perf top na několik sekund a poté perf record -F 99 -g -p PID -- sleep 30 pro problematický proces. 30sekundový záznam při 99 Hz vyprodukuje přibližně 1,7 MB dat.
  3. Pokud je proces zaseknutý, pomalý nebo vrací chyby, spusťte strace -c -p PID po dobu deseti sekund a přečtěte si souhrn. Pokud dominuje jedna kategorie systémových volání, zúžte výběr pomocí strace -e trace=GROUP -T -p PID.
  4. Jakmile najdete podezřelé systémové volání nebo funkci, odpojte se. Nenechávejte žádný z nástrojů běžet na produkčním prostředí déle, než je nutné.

Dvě upozornění. strace Výstup může obsahovat proměnné prostředí, cesty k souborům a bajty načtené ze soketů, proto před sdílením protokolů mimo váš tým proveďte jejich čištění. A pokud to budete dělat pravidelně, podívejte se jako další krok na bpftrace a širší sadu nástrojů eBPF jako další krok: stejný druh přehledu, režie pod 1 %, od začátku vytvořené pro produkční prostředí.

Pokud provozujete pracovní úlohy, u nichž je důležitý hluboký diagnostický přístup a sdílená infrastruktura nepřichází v úvahu, podívejte se na naše dedikované servery.

background image
Je váš VPS na takové úrovni?

VPS FDC jsou standardně vybaveny disky NVMe, procesory EPYC a skutečně neměřenou šířkou pásma. Jste připraveni na upgrade?

Odemkněte výkonnost nyní

Blog

Tento týden byly představeny

Další články
Proč je důležité mít výkonný a neměřený VPS

Proč je důležité mít výkonný a neměřený VPS

VPS bez měření poskytuje paušální šířku pásma s pevnou rychlostí portu. Jak se liší od plánů s měřením, kdy se vyplatí a co zkontrolovat před nákupem.

7 min čtení - 9. května 2025

Správa paměti v systému Linux: Cgroups: Swap, OOM Killer a Cgroups

12 min čtení - 31. května 2026

Další články
background image

Máte dotazy nebo potřebujete vlastní řešení?

icon

Flexibilní možnosti

icon

Globální dosah

icon

Okamžité nasazení

icon

Flexibilní možnosti

icon

Globální dosah

icon

Okamžité nasazení