strace i perf: ściągawka z rozwiązywania problemów w systemie Linux
13 min czytania - 4 czerwca 2026

Kiedy używać strace vs perf w systemie Linux, jakie polecenia będą faktycznie uruchamiane i jak utrzymać niski narzut podczas debugowania obciążonego serwera produkcyjnego.
strace i perf do rozwiązywania problemów w systemie Linux
Gdy serwer Linux działa wolno, ulega awariom lub nadmiernie obciąża procesor, a logi aplikacji nie wyjaśniają przyczyny, dwa narzędzia pozwalają wypełnić większość luk. strace pokazuje, o co proces prosi jądro. perf pokazuje, na co procesor poświęca swój czas. Razem odpowiadają na pytania „dlaczego się zawiesił” i „co robi”, których żadne inne narzędzie nie rozwiązuje tak tanio.
W tym poście omówiono, kiedy sięgać po każde z tych narzędzi, jak je zainstalować, jakie polecenia faktycznie uruchomić oraz jak utrzymać obciążenie na rozsądnym poziomie na serwerze produkcyjnym.
Kiedy używać strace, a kiedy perf
Różnica jest prosta. Użyj perf , gdy procesor jest zajęty i chcesz wiedzieć, która funkcja jest za to odpowiedzialna. Użyj strace gdy proces zawiesza się, ulega awarii, zwraca dziwne błędy lub zachowuje się w sposób, którego logi nie wyjaśniają.
perf pobiera próbki liczników sprzętowych jądra z konfigurowalną częstotliwością, więc obciążenie wynosi zazwyczaj poniżej 1% i można go bezpiecznie uruchamiać w środowisku produkcyjnym. strace przechwytuje każde wywołanie systemowe poprzez ptrace, co może spowolnić proces docelowy od 10 do 100 razy. Używaj go oszczędnie w systemach produkcyjnych i zawsze z filtrami.
| Objaw | Zacznij od | Następnie |
|---|---|---|
| Wysokie obciążenie procesora | perf top lub perf record -g | strace -c na gorącym procesie |
| Powolny dysk lub oczekiwanie na operacje we/wy | perf stat z powodu braków w pamięci podręcznej | strace -e trace=file |
| Zawieszenie procesu lub cichy błąd | strace -e trace=file,network | perf stat w celu wykluczenia obciążenia procesora |
| Konflikty blokad lub powolne API | strace -c, należy zwrócić uwagę na futex | perf record -g |
Instalacja strace i perf
Oba narzędzia znajdują się w standardowych repozytoriach. strace opiera się na ptrace syscall, który od lat jest częścią każdego nowoczesnego jądra. perf korzysta z perf_events i wymaga pakietu zgodnego z używanym jądrem.
sudo apt install strace linux-tools-common linux-tools-$(uname -r)
W systemach RHEL, AlmaLinux lub Fedora:
sudo dnf install strace perf
Bit $(uname -r) liczy się wersja. Plik binarny perf skompilowany pod inną wersję jądra generuje mylące wyniki i może w tle pomijać zdarzenia. Sprawdź za pomocą perf --version i strace -V po instalacji.
Aby perf wyświetlał nazwy funkcji zamiast adresów szesnastkowych, potrzebne są symbole debugowania. Zainstaluj odpowiedni plik -dbg lub -debuginfo (na przykład libc6-dbg w systemie Debian) i skompiluj własne pliki binarne za pomocą -g w GCC.
W kontenerach strace potrzebuje --cap-add=SYS_PTRACE i perf wymaga --cap-add=SYS_ADMIN podczas uruchamiania za pomocą Docker. Bez tych ograniczeń narzędzia zawodzą w sposób przypominający błędy.
Śledzenie wywołań systemowych za pomocą strace
Uruchomienie strace command śledzi proces od momentu uruchomienia. Aby dołączyć do uruchomionego procesu, użyj strace -p PID. W przypadku procesów wielowątkowych lub tworzących procesy potomne należy dodać -f , aby śledzić procesy potomne, w przeciwnym razie przegapisz większość aktywności.
Wiersze wyjścia kończą się wartością zwracaną. -1 ENOENT oznacza, że plik, o który poprosił proces, nie istnieje. -1 EACCES oznacza uprawnienia. Te dwa błędy same w sobie stanowią zaskakująco dużą część błędów produkcyjnych.
Najbardziej przydatnym parametrem jest -e trace=GROUP, która ogranicza wyjście do określonej kategorii wywołań systemowych i pozwala utrzymać poziom szumu na akceptowalnym poziomie.
| Grupa | wywołań | Do czego służy |
|---|---|---|
file | openat, stat, read, write | Brakujące konfiguracje, błędy uprawnień, powolne operacje wejścia/wyjścia |
network | socket, connect, bind, recvfrom | Odmowa połączenia, awarie DNS, problemy z TLS |
process | execve, clone, wait4 | Awarie, burze forków, brakujące pliki binarne |
futex | futex | Konflikty blokad i zawieszanie się wątków |
Na obciążonym serwerze zacznij od strace -c -p PID przez dziesięć lub dwadzieścia sekund. Flaga -c flaga wyświetla podsumowanie liczby wywołań systemowych, całkowitego czasu i błędów po odłączeniu. Dzięki temu wiesz, którą kategorię warto dokładniej sprawdzić, bez zalewania terminala informacjami. Następnie podłącz się ponownie z wąskim filtrem.
Inne flagi, o których warto wiedzieć: -T rejestruje czas spędzony na każdym wywołaniu, -Z wyświetla tylko nieudane wywołania oraz -o file zapisuje do pliku dziennika zamiast do terminala, co jest znacznie szybsze w przypadku hałaśliwego procesu.
Profilowanie procesora za pomocą perf
perf posiada cztery polecenia, z których będziesz korzystać najczęściej.
| Polecenie | Co robi | Typowe flagi |
|---|---|---|
perf stat | Migawka liczników: cykle, nieudane operacje pamięci podręcznej, zmiany kontekstu | -e, -p, -a |
perf top | Podgląd na żywo najczęściej używanych funkcji w systemie | --sort comm,dso,symbol |
perf record | Przechwytuje próbki do perf.data do analizy offline | -F, -g, -p |
perf report | Odczytuje perf.datai klasyfikuje funkcje według udziału w próbkach | --stdio, --sort |
Zacznij od perf stat -p PID , aby uzyskać szybki przegląd. Liczby, na które należy zwrócić uwagę:
- IPC (instrukcje na cykl) poniżej 1,0: procesor się zawiesza, zazwyczaj podczas dostępu do pamięci.
- Wysoka liczba nieudanych prób odczytu z pamięci podręcznej (LLC-load-misses): zestaw roboczy nie mieści się w pamięci podręcznej, więc procesor czeka na pamięć RAM.
- Duża liczba przełączeń kontekstu: typowe dla obciążeń związanych z operacjami wejścia/wyjścia, gdzie wątki ciągle blokują się na dysku lub w sieci.
Jeśli coś wygląda na nieprawidłowe, sprawdź perf record -F 99 -g -p PID -- sleep 30. -F 99 próbkuje z częstotliwością 99 Hz, co wystarcza do znalezienia gorących funkcji i pozwala uniknąć synchronizacji z zegarem jądra przy okrągłych wartościach, takich jak 100 Hz. Flaga -g flaga przechwytuje wykresy wywołań, dzięki czemu perf report może pokazać, które ścieżki do funkcji są za to odpowiedzialne
W perf reportkolumna „Overhead” przedstawia udział w całkowitej liczbie próbek. Wysokie obciążenie w _int_malloc lub memcpy oznacza intensywną alokację. Wysokie obciążenie w jednej z twoich własnych funkcji to ten punkt newralgiczny, którego szukałeś.
Jeśli zamiast nazw funkcji widzisz adresy szesnastkowe, plik binarny jest pozbawiony informacji o symbolach lub brakuje symboli debugowania. Zainstaluj pasujący -dbg pakiet lub skompiluj plik binarny ponownie z -g.
Praktyczny przebieg pracy na serwerze produkcyjnym
W przypadku rzeczywistego incydentu na obciążonym serwerze procedura wygląda następująco:
- Najpierw potwierdź objawy za pomocą niedrogich narzędzi:
top,vmstat,iostat. Jeśli korzystasz z maszyny wirtualnej, sprawdź kolumnęstkolumnę (steal). Wartość powyżej 5% oznacza, że wąskim gardłem jest hiperwizor, a nie Twój kod. - Jeśli obciążenie procesora jest wysokie, uruchom
perf topprzez kilka sekund, a następnieperf record -F 99 -g -p PID -- sleep 30dla procesu, który sprawia kłopoty. 30-sekundowy zapis przy częstotliwości 99 Hz generuje około 1,7 MB danych. - Jeśli proces zawiesił się, działa wolno lub zwraca błędy, uruchom
strace -c -p PIDprzez dziesięć sekund i przeczytaj podsumowanie. Jeśli dominuje jedna kategoria wywołań systemowych, zawęź zakres za pomocąstrace -e trace=GROUP -T -p PID. - Po znalezieniu podejrzanego wywołania systemowego lub funkcji, odłącz się. Nie pozostawiaj żadnego z narzędzi uruchomionego w środowisku produkcyjnym dłużej, niż to konieczne.
Dwa zastrzeżenia. strace Wynik może zawierać zmienne środowiskowe, ścieżki do plików oraz bajty odczytane z gniazd, więc oczyść logi przed udostępnieniem ich poza zespołem. A jeśli zamierzasz to robić regularnie, w następnym kroku przyjrzyj się bpftrace i szerszy zestaw narzędzi eBPF jako następny krok: ten sam rodzaj wglądu, obciążenie poniżej 1%, stworzony od początku z myślą o środowisku produkcyjnym.
Jeśli obsługujesz obciążenia, w których istotny jest głęboki dostęp diagnostyczny, a infrastruktura współdzielona nie wchodzi w grę, zapoznaj się z naszą ofertą serwerów dedykowanych.

Serwery VPS FDC są standardowo wyposażone w dyski NVMe, procesory EPYC i prawdziwie niezmierzoną przepustowość. Gotowy na aktualizację?
Odblokuj wydajność już terazDlaczego ważne jest posiadanie wydajnego i niezmierzonego serwera VPS?
Niezmierzony VPS zapewnia zryczałtowaną przepustowość przy stałej prędkości portu. Czym różnią się one od planów taryfowych, kiedy się opłacają i co należy sprawdzić przed zakupem.
7 min czytania - 9 maja 2025
Zarządzanie pamięcią w systemie Linux: Swap, OOM Killer i Cgroups
12 min czytania - 31 maja 2026

Masz pytania lub potrzebujesz niestandardowego rozwiązania?
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie