Systrace — co to jest, narzędzie do śledzenia systemu Android

Autor: IT Sectr Opublikowano: 2026-03-31 Czas czytania: 9 min

Systrace to narzędzie do śledzenia systemowego Androida, które zbiera dane o działaniu jądra Linux, procesora, akceleratora graficznego i wszystkich procesach systemu w krótkim czasie. W przeciwieństwie do Traceview, który koncentruje się na metodach wewnątrz aplikacji, Systrace pokazuje obraz systemowy: obciążenie każdego rdzenia CPU, pracę SurfaceFlinger, wywołania Binder i cykle GC. Według Google, 2024, narzędzie jest niezastąpione do diagnozowania pominiętych klatek, częstego zbierania śmieci i anomalii w wątku UI.

Najważniejsze

  • Systrace — narzędzie niskopoziomowego śledzenia systemowego Androida, działające przez atrace/ftrace
  • Ślady zawierają dane CPU, GPU, wątków, SurfaceFlinger i Binder za okres do 60 sekund
  • Analiza pozwala zobaczyć dokładną przyczynę pominiętych klatek i blokad wątku UI
  • Integracja z Android Studio i wierszem poleceń dla elastycznego przechwytywania i automatyzacji
  • Perfetto — następca Systrace na Android 12+, używający wspólnego formatu protobuf

Czym jest Systrace

Systrace to narzędzie wiersza poleceń z Android SDK, które przechwytuje i łączy dane z wielu źródeł śledzenia jądra (ftrace) i przestrzeni użytkownika (atrace) w jeden raport HTML. Narzędzie pojawiło się w Android 4.1 (Jelly Bean) jako zamiennik starego narzędzia traceview do profilowania systemowego i przez długi czas pozostawało standardowym środkiem diagnostyki wydajności na platformie Android.

Architektura Systrace

Systrace opiera się na ftrace — mechanizmie śledzenia jądra Linux, dostępnym w Android od wersji 4.1. Podczas uruchamiania Systrace aktywuje określone kategorie śladów: sched (planista zadań), freq (częstotliwość CPU), idle (stany bezczynności), workq (kolejki robocze), binder, gfx i inne. Dane są zbierane w pierścieniowym buforze jądra i po zatrzymaniu zrzutu łączone w jeden plik trace.html, który otwiera się w dowolnej przeglądarce.

Systrace w kontekście Android Studio

Od Android Studio 3.1 Systrace jest wbudowany w CPU Profiler. W trybie “Trace System Calls” profiler uruchamia Systrace na podłączonym urządzeniu i wyświetla wyniki bezpośrednio w oknie Android Studio. To eliminuje konieczność pracy z wierszem poleceń w podstawowych przypadkach, ale zachowuje pełną funkcjonalność — wszystkie kategorie śladów, filtrowanie i interaktywną oś czasu. Wydajność urządzenia podczas śledzenia spada nieznacznie, ponieważ ftrace jest zaprojektowany do minimalnego narzutu.

Jak działa Systrace

Systrace wykorzystuje dwa mechanizmy zbierania danych: ftrace na poziomie jądra dla zdarzeń systemowych i atrace w przestrzeni użytkownika dla znaczników specyficznych dla Androida. ftrace rejestruje przełączania kontekstu (sched_switch), zmiany częstotliwości CPU (cpu_frequency), przerwania (irq_handler_entry) i inne zdarzenia. atrace dodaje znaczniki z frameworka Androida — początek i koniec renderowania klatki, wywołania SurfaceFlinger i transakcje Binder.

Łańcuch renderowania klatki w Systrace

Kluczowa możliwość Systrace — wizualizacja łańcucha renderowania każdej klatki: aplikacja → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Jeśli na którymś etapie wystąpi opóźnienie, Systrace pokazuje dokładną przyczynę: aplikacja nie zdążyła przygotować bufora, SurfaceFlinger czekał na VSync lub HWC nie mógł skomponować warstw. Frame Lifecycle na osi czasu jest kolorowany według statusów: zielony (na czas), żółty (opóźnienie), czerwony (pominięcie). Ta wizualizacja to główne narzędzie do optymalizacji wydajności UI.

Kategorie śladów

Systrace obsługuje ponad 20 kategorii śladów, z których każda zawiera zestaw powiązanych zdarzeń. Ważne kategorie: gfx (renderowanie grafiki), input (obsługa wejścia), view (system View), webview (WebView), power (zużycie energii), hal (abstrakcja sprzętowa). Do profilowania gier przydatna jest kategoria gfx z szczegółowością do poleceń GPU przez AGI (Android GPU Inspector).

Kluczowe możliwości Systrace

Systrace zapewnia unikalny dla Androida zestaw możliwości, które są niedostępne w innych profilerach: systemowa oś czasu, metryki na poziomie jądra i automatyczne wykrywanie problemów.

Interaktywna oś czasu

Raport HTML Systrace zawiera wielopoziomową oś czasu, gdzie każdy tor odpowiada jednemu procesowi lub wątkowi. Można przybliżać i oddalać skalę czasu, klikać na zdarzenia, aby wyświetlić szczegóły (czas trwania, proces inicjujący, dodatkowe argumenty). Kodowanie kolorami pomaga szybko się orientować: zielone bloki — praca procesu, niebieskie — oczekiwanie, pomarańczowe — przerwanie, białe — bezczynność.

Komunikaty Alert

Systrace automatycznie analizuje ślad i wyświetla komunikaty Alert z wskazaniem problematycznych miejsc. Na przykład: “Buffer underrun — SurfaceFlinger nie zdążył odebrać bufora przed VSync” lub “Long Binder transaction — 42 ms w wątku Binder_1”. Każdy alert zawiera link do odpowiedniego fragmentu osi czasu i zalecenie naprawy. To oszczędza godziny ręcznej analizy i jest jednym z głównych powodów, aby używać Systrace zamiast ręcznego logowania.

Metoda Trace.beginSection

Deweloper może dodawać własne znaczniki do śladu Systrace przez API Trace.beginSection i Trace.endSection. Pozwala to prześledzić wykonanie krytycznych fragmentów kodu bezpośrednio na systemowej osi czasu — na przykład oznaczyć początek i koniec ładowania danych lub obliczania układu. Znaczniki są wyświetlane jako osobne bloki na torze aplikacji i widoczne obok zdarzeń systemowych.

KategoriaDaneTypowe zastosowanie
schedPrzełączania kontekstu, stany bezczynnościBlokady wątków, contention
gfxVSync, przygotowanie bufora, HWCFrame drops, jank
binderTransakcje Binder, opóźnienieOpóźnienia IPC, zdalne wywołania
freqCzęstotliwość CPU, scaling governorThrottling, zużycie energii
gfx + AGIPolecenia GPU, shaderyWydajność gier

Jak uruchomić Systrace

Uruchomienie Systrace jest możliwe na dwa sposoby: przez Android Studio CPU Profiler (tryb “Trace System Calls”) lub przez wiersz poleceń za pomocą skryptu python systrace.py z folderu platform-tools. Każdy sposób ma swoje scenariusze zastosowania.

Uruchomienie przez Android Studio

Podłącz urządzenie, otwórz Profiler (View → Tool Windows → Profiler), wybierz swój proces, przejdź do zakładki CPU, wybierz tryb “Trace System Calls” i naciśnij Record. Po 5–30 sekundach naciśnij Stop — Android Studio uruchomi Systrace na urządzeniu, poczeka na zakończenie i załaduje wynik. Ograniczenie: nagrywanie jest możliwe tylko gdy Profiler jest otwarty, co jest niewygodne dla długich scenariuszy lub automatyzacji.

Uruchomienie z wiersza poleceń

Dla bardziej elastycznej kontroli użyj skryptu systrace.py. Określ kategorie śladów, czas trwania i nazwę pliku wyjściowego. Przykład: przechwytywanie danych gfx, input i sched na 10 sekund. Do uruchomienia wymagany jest Python 2.7+ i podłączone urządzenie z debugowaniem USB. Na Android 12+ Systrace został zastąpiony przez Perfetto — polecenie pozostaje takie samo, ale skrypt przekierowuje wywołania do perfetto.

bash
# Podstawowe uruchomienie systrace przez 10 sekund
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Tylko kategoria gfx do analizy UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Konfiguracja własnych znaczników w kodzie

Aby twój kod pojawił się na osi czasu Systrace, otocz krytyczny fragment w Trace.beginSection / Trace.endSection. Ważne, aby beginSection i endSection były ściśle sparowane — w przeciwnym razie Systrace pokaże nieprawidłową oś czasu. W Kotlin wygodnie jest użyć inline-extension, aby zagwarantować zamknięcie sekcji nawet przy wyjątku.

kotlin
import android.os.Trace

fun traceSection(name: String, block: () -> Unit) {
    Trace.beginSection(name)
    try {
        block()
    } finally {
        Trace.endSection()
    }
}

// Użycie w kodzie
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Czytanie raportu HTML Systrace

Raport Systrace to samodzielny plik HTML, który można otworzyć w Chrome, Edge lub Firefox. Zawiera interaktywną oś czasu, panel wyboru procesów, listę komunikatów alert i kluczowe metryki (frame rate, CPU usage, binder transactions). Zrozumienie struktury raportu to kluczowa umiejętność dla efektywnego profilowania.

Oś czasu i nawigacja

Oś czasu wyświetla czas od lewej do prawej. Każdy proces i wątek — osobny tor. Klawisze W/S przybliżają/oddalają, A/D przesuwają w czasie. Zaznacz obszar myszą, aby powiększyć fragment. Linie VSync pokazują granice klatek (co 16.6 ms przy 60 FPS). Jeśli między dwiema liniami VSync nie mieści się pełny cykl renderowania — klatka została pominięta. Zwracaj uwagę na tor SurfaceFlinger: jeśli jest długo zajęty (pomarańczowy blok), oznacza to, że kompozycja warstw spowalnia ogólne renderowanie.

Analiza komunikatów alert

Panel Alerts w lewej części raportu zawiera automatycznie wykryte problemy. Każdy alert jest klikalny — po kliknięciu oś czasu przesuwa się do problematycznego momentu. Najczęstsze alerty: “Long Sync” (długa synchronizacja wątku), “Scheduling Delay” (opóźnienie planisty), “Buffer Overrun” (przepełnienie bufora SurfaceFlinger). Jeśli alert pokazuje wartość około 100 ms dla Scheduling Delay, to bezpośrednio wskazuje, że wątek UI czekał na CPU z powodu obciążenia w tle — należy przenieść ciężkie obliczenia do Worker Thread.

Frame Lifecycle i jank

Do analizy pominiętych klatek włącz tory SurfaceFlinger i app.gfx. Każda klatka jest wyświetlana jako prostokąt: zielony (≤16 ms), żółty (16–32 ms), czerwony (>32 ms). Jeśli widzisz czerwony prostokąt na torze aplikacji, kliknij na niego — Systrace pokaże, która dokładnie metoda (lub wywołanie systemowe) przekroczyła limit. Według Google (Android Performance Patterns, 2023), 70% problemów jank jest spowodowanych przez długi onBindViewHolder lub częste GC.

Systrace vs Perfetto: przejście na nowy format

Perfetto to następca Systrace, przedstawiony przez Google w Android 9 (Pie) jako narzędzie eksperymentalne i stał się głównym od Androida 12. Perfetto używa nowoczesnego formatu protobuf, obsługuje długie sesje (godziny zamiast sekund) i posiada interfejs Web UI do przeglądania śladów. Omówmy kluczowe różnice między dwoma systemami.

KryteriumSystracePerfetto
FormatRaport HTML (trace.html)Protobuf (.trace / .perfetto-trace)
Czas trwaniaDo 60 sekundGodziny, gigabajty danych
InterfejsWbudowany HTMLWeb UI (ui.perfetto.dev)
KategorieStałe (ftrace + atrace)Rozszerzalne (zapytania SQL do śladu)
MobilnośćTylko AndroidAndroid, Linux, Chrome, Windows

Pomimo przejścia na Perfetto, umiejętność pracy z Systrace pozostaje aktualna: na urządzeniach do Androida 11 jest używany domyślnie, a Perfetto zachowuje wsteczną zgodność z kategoriami Systrace. W Android Studio CPU Profiler używa Perfetto dla nowych urządzeń i Systrace dla starych — przezroczysto dla użytkownika. Dla CI/CD zaleca się używanie Perfetto, ponieważ jego format nadaje się do automatycznego przetwarzania przez Python i SQL.

Przykłady użycia Systrace

Do praktycznego opanowania Systrace rozważmy dwa scenariusze: znalezienie przyczyny pominiętych klatek podczas przewijania i diagnozowanie częstego GC, który blokuje wątek UI.

Szukanie jank podczas przewijania RecyclerView

Uruchom Systrace z kategorią gfx na 10 sekund, przewiń listę w aplikacji. W raporcie znajdź fragmenty z czerwonymi klatkami. Kliknij na problematyczną klatkę i spójrz na tor app — jeśli tam jest blok “inflateLayout” lub “onBindViewHolder” szerokości >16 ms, problem leży w rozwijaniu układu lub wiązaniu danych. Rozwiązanie: zoptymalizuj układ (zmniejsz głębokość ViewGroup, ViewStub), wyodrębnij ładowanie obrazów do Glide z onAttachedToWindow.

Diagnostyka GC Throughput

Systrace z kategorią freq i sched pozwala zobaczyć, jak często cykle GC wypierają wątek UI. Znajdź tor aplikacji na osi czasu — jeśli widzisz okresowe bloki o czasie trwania 20–50 ms z nazwą “Concurrent GC”, oznacza to, że garbage collector działa zbyt często. Dodaj kategorię “dalvik” do szczegółowej analizy. Rozwiązanie: konwertuj Bitmap na ByteBuffer, używaj puli obiektów (ObjectPool) do częstych alokacji, zmniejsz fragmentację sterty przez argument ART.

bash
# Uruchomienie z kategoriami do analizy UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Przechwytywanie z długością 30 sekund dla powtarzalnego testu
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Często zadawane pytania

Czy można uruchomić Systrace bez praw root?

Tak, do uruchomienia Systrace nie są wymagane prawa root. Narzędzie używa atrace, który jest dostępny na każdym urządzeniu z włączonym debugowaniem USB. Niektóre kategorie (power, freq) mogą wymagać podpisu systemu, ale podstawowe (gfx, sched, input) działają na wszystkich urządzeniach.

Jaki jest maksymalny rozmiar pliku śladu?

Ograniczenie do 60 sekund jest związane z pojemnością pierścieniowego bufora ftrace — przy dłuższym nagrywaniu bufor jest nadpisywany. Perfetto usuwa to ograniczenie: można nagrywać godziny i otrzymywać ślady o rozmiarze do kilku gigabajtów z przesyłaniem przez USB lub strumieniowym zapisem na dysk.

Dlaczego w raporcie HTML brak danych mojej aplikacji?

Możliwe przyczyny: aplikacja nie została przełączona w tryb debuggable, nie dodano flagi android:debuggable=”true” w manifeście lub używana jest wersja release. Sprawdź także, czy w kategoriach podano --app=com.example.app — w przeciwnym razie Systrace przechwytuje tylko procesy systemowe.

Jak dodać własny znacznik do Systrace z kodu native?

Dla C++ użyj ATRACE_BEGIN i ATRACE_END z biblioteki libcutils. Dołącz plik nagłówkowy i otocz potrzebny fragment. Znacznik pojawi się w Systrace na torze twojego procesu, co jest szczególnie przydatne do analizy silników gier (Unity, Unreal).

Czym zastąpić Systrace na Android 12+?

Na Android 12 i nowszych używaj Perfetto. Zainstaluj agenta perfetto na urządzeniu przez ADB, uruchom nagrywanie w formacie JSON. Do szybkiego przeglądania używaj Perfetto Web UI (ui.perfetto.dev), a dla CI — eksportu poleceniem z TraceProcessor w Pythonie.

Podsumowanie

  • Systrace — systemowy tracer Androida, działający na poziomie jądra przez ftrace i atrace
  • Pokazuje obciążenie CPU, GPU, SurfaceFlinger i transakcje Binder na jednej osi czasu
  • Raport HTML zawiera automatyczne komunikaty Alert z wskazaniem problemów i zaleceń
  • Uruchamianie przez Android Studio Profiler lub wiersz poleceń z systrace.py
  • Wątek UI jest krytyczny: każda klatka musi mieścić się w 16.6 ms dla 60 FPS
  • Na Android 12+ Systrace został zastąpiony przez Perfetto z obsługą długich sesji i zapytań SQL
  • Zaleca się łączenie Systrace i Traceview do profilowania systemowego i aplikacyjnego

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również