Systrace — wat is het, hulpmiddel voor systeemtracering van Android

Auteur: IT Sectr Gepubliceerd: 2026-03-31 Leestijd: 9 min

Systrace is een hulpmiddel voor systeemtracering van Android dat gegevens verzamelt over de werking van de Linux-kernel, processor, grafische versneller en alle systeemprocessen in een korte periode. In tegenstelling tot Traceview, dat zich richt op methoden binnen de app, toont Systrace het systeembeeld: belasting van elke CPU-kern, werk van SurfaceFlinger, Binder-aanroepen en GC-cycli. Volgens Google, 2024 is het hulpmiddel onmisbaar voor het diagnosticeren van overgeslagen frames, frequente garbagecollection en afwijkingen in de UI-thread.

Belangrijkste punten

  • Systrace — laag-niveau systeemtracering van Android, werkend via atrace/ftrace
  • Traces bevatten CPU-, GPU-, thread-, SurfaceFlinger- en Binder-gegevens voor een periode tot 60 seconden
  • Analyse maakt het mogelijk de exacte oorzaak van overgeslagen frames en UI-threadblokkades te zien
  • Integratie met Android Studio en opdrachtregel voor flexibel vastleggen en automatisering
  • Perfetto — opvolger van Systrace op Android 12+, gebruikmakend van het gemeenschappelijke protobuf-formaat

Wat is Systrace

Systrace is een opdrachtregelprogramma uit de Android SDK dat gegevens uit meerdere traceringbronnen van de kernel (ftrace) en gebruikersruimte (atrace) vastlegt en combineert in één HTML-rapport. Het hulpmiddel verscheen in Android 4.1 (Jelly Bean) als vervanging van het oude traceview-hulpmiddel voor systeemprofilering en bleef lange tijd het standaardmiddel voor prestatiediagnose op het Android-platform.

Architectuur van Systrace

Systrace vertrouwt op ftrace — het traceringmechanisme van de Linux-kernel, beschikbaar in Android vanaf versie 4.1. Bij het starten activeert Systrace opgegeven trace-categorieën: sched (taakplanner), freq (CPU-frequentie), idle (inactieve toestanden), workq (werkrijen), binder, gfx en andere. Gegevens worden verzameld in een ringbuffer van de kernel en na het stoppen samengevoegd tot één trace.html-bestand dat in elke browser kan worden geopend.

Systrace in de context van Android Studio

Vanaf Android Studio 3.1 is Systrace ingebouwd in de CPU Profiler. In de modus “Trace System Calls” start de profiler Systrace op het aangesloten apparaat en toont de resultaten direct in het Android Studio-venster. Dit elimineert de noodzaak om met de opdrachtregel te werken voor basale gevallen, terwijl de volledige functionaliteit behouden blijft — alle trace-categorieën, filtering en interactieve tijdlijn. De prestaties van het apparaat tijdens tracering nemen licht af, omdat ftrace is ontworpen voor minimale overhead.

Hoe werkt Systrace

Systrace gebruikt twee mechanismen voor gegevensverzameling: ftrace op kernel-niveau voor systeemgebeurtenissen en atrace in de gebruikersruimte voor Android-specifieke markeringen. ftrace registreert contextwisselingen (sched_switch), CPU-frequentiewijzigingen (cpu_frequency), onderbrekingen (irq_handler_entry) en andere gebeurtenissen. atrace voegt markeringen uit het Android-framework toe — begin en einde van frameweergave, SurfaceFlinger-aanroepen en Binder-transacties.

Frame-weergaveketen in Systrace

Belangrijkste functie van Systrace — visualisatie van de weergaveketen van elk frame: app → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Als er in een fase vertraging optreedt, toont Systrace de exacte oorzaak: de app kon de buffer niet voorbereiden, SurfaceFlinger wachtte op VSync of HWC kon de lagen niet samenstellen. Frame Lifecycle op de tijdlijn is gekleurd op status: groen (op tijd), geel (vertraging), rood (overgeslagen). Deze visualisatie is het belangrijkste hulpmiddel voor het optimaliseren van UI-prestaties.

Trace-categorieën

Systrace ondersteunt meer dan 20 trace-categorieën, die elk een set gerelateerde gebeurtenissen bevatten. Belangrijke categorieën: gfx (grafische weergave), input (invoerverwerking), view (View-systeem), webview (WebView), power (energieverbruik), hal (hardwareabstractie). Voor het profileren van games is de categorie gfx met detaillering tot GPU-commando's via AGI (Android GPU Inspector) nuttig.

Belangrijkste functies van Systrace

Systrace biedt een unieke set functies voor Android die niet beschikbaar zijn in andere profilers: systeemtijdlijn, metrieken op kernel-niveau en automatische probleemdetectie.

Interactieve tijdlijn

Het HTML-rapport van Systrace bevat een gelaagde tijdlijn, waarbij elk spoor overeenkomt met één proces of thread. De tijdschaal kan worden in- en uitgezoomd, er kan op gebeurtenissen worden geklikt voor details (duur, initiërend proces, extra argumenten). Kleurocodering helpt bij snelle oriëntatie: groene blokken — proceswerk, blauw — wachten, oranje — onderbreking, wit — inactiviteit.

Alert-berichten

Systrace analyseert automatisch de trace en toont Alert-berichten met aanduiding van probleemlocaties. Bijvoorbeeld: “Buffer underrun — SurfaceFlinger kon de buffer niet ontvangen vóór VSync” of “Long Binder transaction — 42 ms in thread Binder_1”. Elke alert bevat een link naar het corresponderende deel van de tijdlijn en een aanbeveling voor correctie. Dit bespaart uren handmatige analyse en is een van de belangrijkste redenen om Systrace te gebruiken in plaats van handmatig loggen.

Methode Trace.beginSection

De ontwikkelaar kan eigen markeringen aan de Systrace-trace toevoegen via de API Trace.beginSection en Trace.endSection. Dit maakt het mogelijk de uitvoering van kritieke codegedeelten direct op de systeemtijdlijn te volgen — bijvoorbeeld het begin en einde van het laden van gegevens of het berekenen van de lay-out markeren. Markeringen worden weergegeven als aparte blokken op het spoor van de app en zijn zichtbaar naast systeemgebeurtenissen.

CategorieGegevensTypisch gebruik
schedContextwisselingen, inactieve toestandenThreadblokkades, contention
gfxVSync, buffervoorbereiding, HWCFrame drops, jank
binderBinder-transacties, latentieIPC-vertragingen, externe aanroepen
freqCPU-frequentie, scaling governorThrottling, energieverbruik
gfx + AGIGPU-commando's, shadersGameprestaties

Hoe Systrace uit te voeren

Het starten van Systrace is op twee manieren mogelijk: via Android Studio CPU Profiler (modus “Trace System Calls”) of via de opdrachtregel met het python-script systrace.py uit de map platform-tools. Elke manier heeft zijn eigen toepassingsscenario's.

Starten via Android Studio

Sluit het apparaat aan, open Profiler (View → Tool Windows → Profiler), selecteer uw proces, ga naar het tabblad CPU, selecteer de modus “Trace System Calls” en druk op Record. Druk na 5–30 seconden op Stop — Android Studio start Systrace op het apparaat, wacht op voltooiing en laadt het resultaat. Beperking: opnemen is alleen mogelijk terwijl Profiler geopend is, wat onhandig is voor lange scenario's of automatisering.

Starten vanaf de opdrachtregel

Voor meer flexibele controle gebruikt u het script systrace.py. Specificeer de trace-categorieën, duur en naam van het uitvoerbestand. Voorbeeld: vastleggen van gfx-, input- en sched-gegevens gedurende 10 seconden. Voor het starten is Python 2.7+ en een aangesloten apparaat met USB-foutopsporing vereist. Op Android 12+ is Systrace vervangen door Perfetto — de opdracht blijft hetzelfde, maar het script stuurt aanroepen door naar perfetto.

bash
# Basisstart van systrace gedurende 10 seconden
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Alleen categorie gfx voor UI-analyse
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Instellen van aangepaste markeringen in code

Om uw code op de Systrace-tijdlijn te laten verschijnen, omhult u het kritieke gedeelte met Trace.beginSection / Trace.endSection. Het is belangrijk dat beginSection en endSection strikt gepaard zijn — anders toont Systrace een onjuiste tijdlijn. In Kotlin is het handig om inline-extension te gebruiken om het sluiten van de sectie te garanderen, zelfs bij een uitzondering.

kotlin
import android.os.Trace

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

// Gebruik in code
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Het HTML-rapport van Systrace lezen

Het Systrace-rapport is een zelfstandig HTML-bestand dat kan worden geopend in Chrome, Edge of Firefox. Het bevat een interactieve tijdlijn, een paneel voor processelectie, een lijst met alert-berichten en belangrijke metrieken (framesnelheid, CPU-gebruik, Binder-transacties). Het begrijpen van de rapportstructuur is een belangrijke vaardigheid voor effectief profileren.

Tijdlijn en navigatie

De tijdlijn toont tijd van links naar rechts. Elk proces en thread — een apart spoor. Toetsen W/S zoomen in/uit, A/D verplaatsen in de tijd. Selecteer een gebied met de muis om een sectie te vergroten. VSync-lijnen tonen framegrenzen (elke 16,6 ms bij 60 FPS). Als er tussen twee VSync-lijnen geen volledige weergavecyclus past — is het frame overgeslagen. Let op het SurfaceFlinger-spoor: als het lang bezet is (oranje blok), vertraagt laagcompositie de algemene weergave.

Analyse van alert-berichten

Het paneel Alerts aan de linkerkant van het rapport bevat automatisch gedetecteerde problemen. Elke alert is aanklikbaar — bij klikken verplaatst de tijdlijn zich naar het probleemmoment. De meest voorkomende alerts: “Long Sync” (lange threadsynchronisatie), “Scheduling Delay” (planningsvertraging), “Buffer Overrun” (bufferoverloop SurfaceFlinger). Als een alert een waarde van ongeveer 100 ms toont voor Scheduling Delay, wijst dit er direct op dat de UI-thread op CPU wachtte vanwege achtergrondbelasting — zware berekeningen moeten naar een Worker Thread worden verplaatst.

Frame Lifecycle en jank

Schakel voor analyse van overgeslagen frames de sporen SurfaceFlinger en app.gfx in. Elk frame wordt weergegeven als een rechthoek: groen (≤16 ms), geel (16–32 ms), rood (>32 ms). Als u een rode rechthoek op het app-spoor ziet, klik er dan op — Systrace toont welke methode (of systeemaanroep) de limiet heeft overschreden. Volgens Google (Android Performance Patterns, 2023) wordt 70% van de jank-problemen veroorzaakt door lange onBindViewHolder of frequente GC.

Systrace vs Perfetto: overgang naar nieuw formaat

Perfetto is de opvolger van Systrace, door Google geïntroduceerd in Android 9 (Pie) als experimenteel hulpmiddel en primair geworden vanaf Android 12. Perfetto gebruikt een modern protobuf-gegevensformaat, ondersteunt lange sessies (uren in plaats van seconden) en heeft een Web UI voor het bekijken van traces. Laten we de belangrijkste verschillen tussen de twee systemen bekijken.

CriteriumSystracePerfetto
FormaatHTML-rapport (trace.html)Protobuf (.trace / .perfetto-trace)
DuurTot 60 secondenUren, gigabytes aan gegevens
InterfaceIngebouwd HTMLWeb UI (ui.perfetto.dev)
CategorieënVast (ftrace + atrace)Uitbreidbaar (SQL-query's op trace)
MobiliteitAlleen AndroidAndroid, Linux, Chrome, Windows

Ondanks de overgang naar Perfetto blijft de vaardigheid om met Systrace te werken relevant: op apparaten tot Android 11 wordt het standaard gebruikt en Perfetto behoudt achterwaartse compatibiliteit met Systrace-categorieën. Android Studio CPU Profiler gebruikt Perfetto voor nieuwe apparaten en Systrace voor oude — transparant voor de gebruiker. Voor CI/CD wordt Perfetto aanbevolen, omdat het formaat geschikt is voor automatische verwerking via Python en SQL.

Voorbeelden van het gebruik van Systrace

Voor het praktisch onder de knie krijgen van Systrace bekijken we twee scenario's: het vinden van de oorzaak van overgeslagen frames tijdens scrollen en het diagnosticeren van frequente GC die de UI-thread blokkeert.

Jank zoeken bij scrollen van RecyclerView

Start Systrace met de categorie gfx gedurende 10 seconden, scroll door de lijst in de app. Zoek in het rapport secties met rode frames. Klik op het problematische frame en kijk naar het app-spoor — als er een blok “inflateLayout” of “onBindViewHolder” met breedte >16 ms is, ligt het probleem bij het uitvouwen van de lay-out of het binden van gegevens. Oplossing: optimaliseer de lay-out (vermindere ViewGroup-diepte, ViewStub), verplaats het laden van afbeeldingen naar Glide met onAttachedToWindow.

Diagnose van GC Throughput

Systrace met de categorieën freq en sched laat zien hoe vaak GC-cycli de UI-thread verdringen. Zoek het app-spoor op de tijdlijn — als u periodieke blokken met een duur van 20–50 ms met de naam “Concurrent GC” ziet, werkt de garbagecollector te vaak. Voeg de categorie “dalvik” toe voor gedetailleerde analyse. Oplossing: converteer Bitmap naar ByteBuffer, gebruik een objectenpool (ObjectPool) voor frequente toewijzingen, verminder heapfragmentatie via het ART-argument.

bash
# Starten met categorieën voor UI + GC-analyse
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Vastleggen met een duur van 30 seconden voor reproduceerbare test
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Veelgestelde vragen

Kan Systrace worden uitgevoerd zonder root-rechten?

Ja, voor het uitvoeren van Systrace is geen root-toegang vereist. Het hulpmiddel gebruikt atrace, dat beschikbaar is op elk apparaat met ingeschakelde USB-foutopsporing. Sommige categorieën (power, freq) kunnen een systeemhandtekening vereisen, maar de basiscategorieën (gfx, sched, input) werken op alle apparaten.

Wat is de maximale grootte van een trace-bestand?

De beperking van 60 seconden houdt verband met de capaciteit van de ftrace-ringbuffer — bij lange opname wordt de buffer overschreven. Perfetto heft deze beperking op: u kunt uren opnemen en traces krijgen met een grootte tot enkele gigabytes met overdracht via USB of streaming naar schijf.

Waarom bevat het HTML-rapport geen gegevens van mijn app?

Mogelijke oorzaken: de app is niet in debuggable-modus gezet, de vlag android:debuggable=”true” is niet toegevoegd in het manifest, of er wordt een release-build gebruikt. Controleer ook of in de categorieën --app=com.example.app is opgegeven — anders legt Systrace alleen systeemprocessen vast.

Hoe voeg ik mijn eigen markering toe aan Systrace vanuit native code?

Gebruik voor C++ ATRACE_BEGIN en ATRACE_END uit de bibliotheek libcutils. Voeg het header-bestand toe en omhul het gewenste gedeelte. De markering verschijnt in Systrace op het spoor van uw proces, wat vooral nuttig is voor analyse van game-engines (Unity, Unreal).

Waarmee kan ik Systrace vervangen op Android 12+?

Gebruik op Android 12 en hoger Perfetto. Installeer de perfetto-agent op het apparaat via ADB, start opname in JSON-formaat. Gebruik voor snelle weergave Perfetto Web UI (ui.perfetto.dev) en voor CI — opdrachtexport met TraceProcessor in Python.

Samenvatting

  • Systrace — systeemtracer van Android, werkend op kernel-niveau via ftrace en atrace
  • Toont belasting van CPU, GPU, SurfaceFlinger en Binder-transacties op één tijdlijn
  • HTML-rapport bevat automatische Alert-berichten met aanduiding van problemen en aanbevelingen
  • Starten via Android Studio Profiler of opdrachtregel met systrace.py
  • UI-thread is kritiek: elk frame moet binnen 16,6 ms vallen voor 60 FPS
  • Op Android 12+ is Systrace vervangen door Perfetto met ondersteuning voor lange sessies en SQL-query's
  • Het combineren van Systrace en Traceview wordt aanbevolen voor systeem- en applicatieprofilering

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook