Systrace — mi ez, Android rendszernyomkövető eszköz

Szerző: IT Sectr Megjelenés: 2026-03-31 Olvasási idő: 9 perc

Systrace egy Android rendszernyomkövető eszköz, amely adatokat gyűjt a Linux kernel, a processzor, a grafikus gyorsító és az összes rendszerfolyamat működéséről rövid idő alatt. Ellentétben a Traceview-val, amely az alkalmazáson belüli metódusokra összpontosít, a Systrace a rendszerképet mutatja: az egyes CPU magok terhelését, a SurfaceFlinger munkáját, a Binder-hívásokat és a GC-ciklusokat. A Google, 2024 szerint az eszköz nélkülözhetetlen a kihagyott keretek, a gyakori szemétgyűjtés és az UI szál rendellenességeinek diagnosztizálásához.

Főbb pontok

  • Systrace — alacsony szintű Android rendszernyomkövető eszköz, atrace/ftrace-en keresztül működik
  • Nyomok CPU, GPU, szál, SurfaceFlinger és Binder adatokat tartalmaznak akár 60 másodperces időtartamra
  • Elemzés lehetővé teszi a kihagyott keretek és az UI szál blokkolásának pontos okát
  • Integráció Android Studio-val és parancssorral a rugalmas rögzítéshez és automatizáláshoz
  • Perfetto — a Systrace utódja Android 12+-on, közös protobuf formátumot használ

Mi az a Systrace

Systrace egy parancssori eszköz az Android SDK-ból, amely a kernel (ftrace) és a felhasználói tér (atrace) több nyomkövetési forrásából származó adatokat rögzíti és egyetlen HTML jelentésbe egyesíti. Az eszköz az Android 4.1-ben (Jelly Bean) jelent meg a régi traceview rendszerprofilozó eszköz helyettesítőjeként, és hosszú ideig az Android platform teljesítménydiagnosztikájának szabványos eszköze maradt.

A Systrace architektúrája

Systrace az ftrace-re támaszkodik — a Linux kernel nyomkövetési mechanizmusára, amely Android 4.1 verziótól elérhető. A Systrace indításakor aktiválja a megadott nyomkövetési kategóriákat: sched (feladatütemező), freq (CPU frekvencia), idle (tétlen állapotok), workq (munka sorok), binder, gfx és mások. Az adatok a kernel gyűrűpufferében gyűlnek, és leállítás után egy trace.html fájlba egyesülnek, amely bármely böngészőben megnyitható.

A Systrace az Android Studio kontextusában

Az Android Studio 3.1-től kezdve a Systrace beépült a CPU Profilerbe. A “Trace System Calls” módban a profiler elindítja a Systrace-t a csatlakoztatott eszközön, és az eredményeket közvetlenül az Android Studio ablakában jeleníti meg. Ez kiküszöböli a parancssor használatának szükségességét alapvető esetekben, miközben megtartja a teljes funkcionalitást — minden nyomkövetési kategória, szűrés és interaktív idővonal. Az eszköz teljesítménye a nyomkövetés során enyhén csökken, mivel az ftrace minimális többletterhelésre lett tervezve.

Hogyan működik a Systrace

Systrace két adatgyűjtő mechanizmust használ: ftrace a kernel szintjén a rendszereseményekhez és atrace a felhasználói térben az Android-specifikus jelölőkhöz. Az ftrace regisztrálja a kontextusváltásokat (sched_switch), a CPU frekvenciaváltozásokat (cpu_frequency), a megszakításokat (irq_handler_entry) és más eseményeket. Az atrace jelölőket ad hozzá az Android keretrendszerből — a keret renderelésének kezdetét és végét, a SurfaceFlinger hívásokat és a Binder tranzakciókat.

Keret renderelési lánc a Systrace-ben

A Systrace legfontosabb funkciója — az egyes keretek renderelési láncának vizualizálása: alkalmazás → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Ha bármely szakaszban késés lép fel, a Systrace megmutatja a pontos okot: az alkalmazás nem tudta előkészíteni a puffert, a SurfaceFlinger a VSync-re várt, vagy a HWC nem tudta összeállítani a rétegeket. A Frame Lifecycle az idővonalon állapot szerint van színezve: zöld (időben), sárga (késés), piros (kihagyás). Ez a vizualizáció a fő eszköz az UI teljesítmény optimalizálásához.

Nyomkövetési kategóriák

Systrace több mint 20 nyomkövetési kategóriát támogat, amelyek mindegyike kapcsolódó események halmazát tartalmazza. Fontos kategóriák: gfx (grafikus renderelés), input (bemenet feldolgozása), view (View rendszer), webview (WebView), power (energiafogyasztás), hal (hardver absztrakció). Játékok profilozásához hasznos a gfx kategória GPU parancsokig történő részletezéssel AGI-n (Android GPU Inspector) keresztül.

A Systrace legfontosabb funkciói

Systrace egyedülálló funkciókészletet kínál Androidhoz, amelyek más profilerekben nem elérhetők: rendszer idővonal, kernel szintű metrikák és automatikus problémadetektálás.

Interaktív idővonal

A Systrace HTML jelentés többszintű idővonalat tartalmaz, ahol minden sáv egy folyamatnak vagy szálnak felel meg. Az időskála nagyítható és kicsinyíthető, az eseményekre kattintva részletek jeleníthetők meg (időtartam, kezdeményező folyamat, további argumentumok). A színkódolás segít a gyors tájékozódásban: zöld blokkok — folyamat munka, kék — várakozás, narancssárga — megszakítás, fehér — tétlenség.

Alert üzenetek

A Systrace automatikusan elemzi a nyomkövetést és Alert üzeneteket jelenít meg a problémás helyek jelölésével. Például: „Buffer underrun — A SurfaceFlinger nem tudta átvenni a puffert a VSync előtt” vagy „Long Binder transaction — 42 ms a Binder_1 szálban”. Minden alert tartalmaz egy hivatkozást az idővonal megfelelő szakaszára és egy javítási javaslatot. Ez órák kézi elemzését takarítja meg, és az egyik fő ok a Systrace használatára a kézi naplózás helyett.

Trace.beginSection metódus

A fejlesztő saját jelölőket adhat hozzá a Systrace nyomkövetéshez a Trace.beginSection és Trace.endSection API-n keresztül. Ez lehetővé teszi a kritikus kódszakaszok végrehajtásának közvetlen nyomon követését a rendszer idővonalon — például az adatbetöltés kezdetének és végének vagy az elrendezés számításának megjelölését. A jelölők külön blokkokként jelennek meg az alkalmazás sávján, és láthatóak a rendszeresemények mellett.

KategóriaAdatokJellemző használat
schedKontextusváltások, tétlen állapotokSzál blokkolások, contention
gfxVSync, puffer előkészítés, HWCKeret kihagyás, jank
binderBinder tranzakciók, késleltetésIPC késések, távoli hívások
freqCPU frekvencia, scaling governorThrottling, energiafogyasztás
gfx + AGIGPU parancsok, shaderekJáték teljesítmény

Hogyan futtassuk a Systrace-t

A Systrace indítása kétféleképpen lehetséges: Android Studio CPU Profileren keresztül (“Trace System Calls” mód) vagy parancssoron keresztül a platform-tools mappában található systrace.py python szkript segítségével. Mindegyik módnak megvannak a saját alkalmazási forgatókönyvei.

Indítás Android Studio-n keresztül

Csatlakoztassa az eszközt, nyissa meg a Profilert (View → Tool Windows → Profiler), válassza ki a folyamatát, lépjen a CPU fülre, válassza a “Trace System Calls” módot, és nyomja meg a Record gombot. 5–30 másodperc után nyomja meg a Stop gombot — az Android Studio elindítja a Systrace-t az eszközön, megvárja a befejeződést, és betölti az eredményt. Korlátozás: a rögzítés csak addig lehetséges, amíg a Profiler nyitva van, ami kényelmetlen hosszú forgatókönyvekhez vagy automatizáláshoz.

Indítás parancssorból

A rugalmasabb vezérléshez használja a systrace.py szkriptet. Adja meg a nyomkövetési kategóriákat, az időtartamot és a kimeneti fájl nevét. Példa: gfx, input és sched adatok rögzítése 10 másodpercig. Az indításhoz Python 2.7+ és USB hibakereséssel csatlakoztatott eszköz szükséges. Android 12+-on a Systrace-t a Perfetto váltotta fel — a parancs ugyanaz marad, de a szkript átirányítja a hívásokat a perfetto-ba.

bash
# A systrace alapindítása 10 másodpercre
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Csak gfx kategória az UI elemzéshez
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Egyéni jelölők beállítása a kódban

Ahhoz, hogy a kódja megjelenjen a Systrace idővonalon, csomagolja a kritikus szakaszt Trace.beginSection / Trace.endSection közé. Fontos, hogy a beginSection és endSection szigorúan páros legyen — különben a Systrace hibás idővonalat jelenít meg. Kotlin-ban kényelmes az inline-extension használata a szakasz lezárásának garantálásához, még kivétel esetén is.

kotlin
import android.os.Trace

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

// Használat a kódban
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

A Systrace HTML jelentés olvasása

A Systrace jelentés egy önálló HTML fájl, amely Chrome-ban, Edge-ben vagy Firefox-ban nyitható meg. Interaktív idővonalat, folyamatkiválasztó panelt, alert üzenetek listáját és kulcs metrikákat (képkocka sebesség, CPU használat, Binder tranzakciók) tartalmaz. A jelentés szerkezetének megértése kulcsfontosságú készség a hatékony profilozáshoz.

Idővonal és navigáció

Az idővonal balról jobbra mutatja az időt. Minden folyamat és szál — külön sáv. A W/S billentyűk nagyítanak/kicsinyítenek, az A/D időben mozgat. Válasszon ki egy területet az egérrel egy szakasz nagyításához. A VSync vonalak mutatják a keretek határait (16.6 ms-ként 60 FPS-nél). Ha két VSync vonal között nem fér el egy teljes renderelési ciklus — a keret kimaradt. Figyelje a SurfaceFlinger sávot: ha hosszú ideig foglalt (narancssárga blokk), a rétegkompozíció lassítja az általános renderelést.

Alert üzenetek elemzése

A jelentés bal oldalán található Alerts panel automatikusan észlelt problémákat tartalmaz. Minden alert kattintható — kattintáskor az idővonal a problémás pillanathoz ugrik. A leggyakoribb alert-ek: „Long Sync” (hosszú szál szinkronizáció), „Scheduling Delay” (ütemező késleltetés), „Buffer Overrun” (SurfaceFlinger puffer túlcsordulás). Ha az alert körülbelül 100 ms értéket mutat a Scheduling Delay-ra, ez közvetlenül jelzi, hogy az UI szál a CPU-ra várt a háttérterhelés miatt — a nehéz számításokat át kell helyezni egy Worker Thread-be.

Frame Lifecycle és jank

A kihagyott keretek elemzéséhez kapcsolja be a SurfaceFlinger és app.gfx sávokat. Minden keret téglalapként jelenik meg: zöld (≤16 ms), sárga (16–32 ms), piros (>32 ms). Ha piros téglalapot lát az alkalmazás sávján, kattintson rá — a Systrace megmutatja, melyik metódus (vagy rendszerhívás) lépte túl a határt. A Google (Android Performance Patterns, 2023) szerint a jank problémák 70%-át a hosszú onBindViewHolder vagy a gyakori GC okozza.

Systrace vs Perfetto: átállás az új formátumra

Perfetto a Systrace utódja, amelyet a Google az Android 9-ben (Pie) kísérleti eszközként mutatott be, és az Android 12-től vált elsődlegessé. A Perfetto modern protobuf adatformátumot használ, támogatja a hosszú munkameneteket (másodpercek helyett órák), és Web UI-val rendelkezik a nyomok megtekintéséhez. Tekintsük át a két rendszer közötti fő különbségeket.

SzempontSystracePerfetto
FormátumHTML jelentés (trace.html)Protobuf (.trace / .perfetto-trace)
IdőtartamAkár 60 másodpercÓrák, gigabájt adat
FelületBeépített HTMLWeb UI (ui.perfetto.dev)
KategóriákRögzített (ftrace + atrace)Bővíthető (SQL lekérdezések a nyomon)
MobilitásCsak AndroidAndroid, Linux, Chrome, Windows

A Perfetto-ra való átállás ellenére a Systrace-szel való munkavégzés készsége továbbra is releváns: az Android 11-ig terjedő eszközökön alapértelmezés szerint használatos, és a Perfetto megtartja a visszamenőleges kompatibilitást a Systrace kategóriákkal. Az Android Studio CPU Profiler a Perfetto-t használja az új eszközökhöz és a Systrace-t a régi eszközökhöz — átláthatóan a felhasználó számára. CI/CD-hez a Perfetto használata ajánlott, mivel formátuma alkalmas automatikus feldolgozásra Pythonon és SQL-en keresztül.

Példák a Systrace használatára

A Systrace gyakorlati elsajátításához vizsgáljunk meg két forgatókönyvet: a görgetés közben kihagyott keretek okának megtalálása és a gyakori GC diagnosztizálása, amely blokkolja az UI szálat.

Jank keresése RecyclerView görgetésekor

Indítsa el a Systrace-t gfx kategóriával 10 másodpercre, görgessen a listán az alkalmazásban. Keresse meg a piros kereteket a jelentésben. Kattintson a problémás keretre, és nézze meg az app sávot — ha van egy “inflateLayout” vagy “onBindViewHolder” blokk >16 ms szélességgel, a probléma az elrendezés kiterjesztésében vagy az adatkötésben van. Megoldás: optimalizálja az elrendezést (csökkentse a ViewGroup mélységet, ViewStub), helyezze át a képbetöltést Glide-ba onAttachedToWindow-val.

GC Throughput diagnosztizálása

A Systrace freq és sched kategóriákkal lehetővé teszi, hogy lássa, milyen gyakran szorítják ki a GC ciklusok az UI szálat. Keresse meg az alkalmazás sávját az idővonalon — ha periodikus blokkokat lát 20–50 ms időtartammal “Concurrent GC” néven, a szemétgyűjtő túl gyakran dolgozik. Adja hozzá a “dalvik” kategóriát a részletes elemzéshez. Megoldás: konvertálja a Bitmap-ot ByteBuffer-ré, használjon objektumpool-t (ObjectPool) a gyakori foglalásokhoz, csökkentse a heap fragmentációt az ART argumentumon keresztül.

bash
# Indítás kategóriákkal az UI + GC elemzéshez
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Rögzítés 30 másodperces időtartammal reprodukálható teszthez
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Gyakran Ismételt Kérdések

Futtatható a Systrace root jogosultságok nélkül?

Igen, a Systrace futtatásához nincs szükség root hozzáférésre. Az eszköz az atrace-t használja, amely bármely engedélyezett USB hibakereséssel rendelkező eszközön elérhető. Egyes kategóriák (power, freq) rendszer aláírást igényelhetnek, de az alapvetők (gfx, sched, input) minden eszközön működnek.

Mekkora a nyomkövetési fájl maximális mérete?

A 60 másodperces korlátozás az ftrace gyűrűpuffer kapacitásával kapcsolatos — hosszú rögzítéskor a puffer felülíródik. A Perfetto feloldja ezt a korlátozást: órákig lehet rögzíteni, és akár több gigabájt méretű nyomokat kaphat USB-n keresztüli átvitellel vagy streamelő lemezírásával.

Miért nem jelennek meg az alkalmazásom adatai a HTML jelentésben?

Lehetséges okok: az alkalmazás nincs debuggable módba kapcsolva, az android:debuggable=”true” jelző nincs hozzáadva a manifestben, vagy release buildet használ. Ellenőrizze azt is, hogy a kategóriákban meg van-e adva a --app=com.example.app — különben a Systrace csak rendszerfolyamatokat rögzít.

Hogyan adhatok hozzá saját jelölőt a Systrace-hez natív kódból?

C++-hoz használja a libcutils könyvtár ATRACE_BEGIN és ATRACE_END függvényeit. Illessze be a header fájlt, és csomagolja be a kívánt szakaszt. A jelölő megjelenik a Systrace-ben a folyamata sávján, ami különösen hasznos a játékmotorok (Unity, Unreal) elemzéséhez.

Mivel helyettesítsem a Systrace-t Android 12+-on?

Android 12 és újabb verziókon használja a Perfetto-t. Telepítse a perfetto ágenst az eszközre ADB-n keresztül, indítsa el a rögzítést JSON formátumban. Gyors megtekintéshez használja a Perfetto Web UI-t (ui.perfetto.dev), CI-hez pedig a TraceProcessor-rel történő parancs exportálást Pythonban.

Összefoglalás

  • Systrace — Android rendszertracerek, kernel szinten ftrace és atrace segítségével működik
  • Megmutatja a CPU, GPU, SurfaceFlinger terhelését és a Binder tranzakciókat egyetlen idővonalon
  • A HTML jelentés automatikus Alert üzeneteket tartalmaz a problémák és javaslatok jelölésével
  • Indítás Android Studio Profileren vagy parancssoron keresztül systrace.py-val
  • Az UI szál kritikus: minden keretnek 16.6 ms-on belül kell lennie 60 FPS-hez
  • Android 12+-on a Systrace-t a Perfetto váltotta fel hosszú munkamenetek és SQL lekérdezések támogatásával
  • A Systrace és Traceview kombinálása ajánlott a rendszer és alkalmazás profilozáshoz

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is