Systrace — vad är det, verktyg för systemspårning av Android

Författare: IT Sectr Publicerad: 2026-03-31 Lästid: 9 min

Systrace är ett verktyg för systemspårning av Android som samlar in data om Linux-kärnans, processorns, grafikacceleratorns och alla systemprocessers arbete under en kort tidsperiod. Till skillnad från Traceview, som fokuserar på metoder i applikationen, visar Systrace systembilden: belastning på varje CPU-kärna, SurfaceFlingers arbete, Binder-anrop och GC-cykler. Enligt Google, 2024 är verktyget oumbärligt för att diagnostisera hoppade bildrutor, frekvent sophämtning och avvikelser i UI-tråden.

Huvudpunkter

  • Systrace — lågnivå systemspårning för Android, som fungerar via atrace/ftrace
  • Spårningar innehåller CPU-, GPU-, tråd-, SurfaceFlinger- och Binder-data i upp till 60 sekunder
  • Analys gör det möjligt att se den exakta orsaken till hoppade bildrutor och blockering av UI-tråden
  • Integration med Android Studio och kommandoraden för flexibel insamling och automatisering
  • Perfetto — efterföljare till Systrace på Android 12+, som använder ett gemensamt protobuf-format

Vad är Systrace

Systrace är ett kommandoradsverktyg från Android SDK som fångar och kombinerar data från flera spårningskällor för kärnan (ftrace) och användarutrymmet (atrace) till en enda HTML-rapport. Verktyget dök upp i Android 4.1 (Jelly Bean) som ersättning för det gamla traceview-verktyget för systemprofilering och förblev under lång tid standardverktyget för prestandadiagnostik på Android-plattformen.

Systrace arkitektur

Systrace förlitar sig på ftrace — mekanismen för spårning av Linux-kärnan, tillgänglig i Android från version 4.1. Vid start aktiverar Systrace angivna spårningskategorier: sched (uppgiftsschemaläggare), freq (CPU-frekvens), idle (vilolägen), workq (arbetsköer), binder, gfx och andra. Data samlas i en ringbuffert i kärnan och efter stopp sammanfogas de till en enda trace.html-fil som kan öppnas i valfri webbläsare.

Systrace i kontexten av Android Studio

Från och med Android Studio 3.1 är Systrace inbyggt i CPU Profiler. I läget ”Trace System Calls” startar profileraren Systrace på den anslutna enheten och visar resultaten direkt i Android Studio-fönstret. Detta eliminerar behovet av att arbeta med kommandoraden för grundläggande fall, samtidigt som full funktionalitet bibehålls — alla spårningskategorier, filtrering och interaktiv tidslinje. Enhetens prestanda under spårning minskar något eftersom ftrace är utformat för minimal overhead.

Hur Systrace fungerar

Systrace använder två mekanismer för datainsamling: ftrace på kärnnivå för systemhändelser och atrace i användarutrymmet för Android-specifika markeringar. ftrace registrerar kontextbyten (sched_switch), CPU-frekvensändringar (cpu_frequency), avbrott (irq_handler_entry) och andra händelser. atrace lägger till markeringar från Android-ramverket — början och slutet av bildrendering, SurfaceFlinger-anrop och Binder-transaktioner.

Bildrenderingskedja i Systrace

Systrace viktigaste funktion — visualisering av renderingskedjan för varje bild: applikation → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Om en försening uppstår i något skede visar Systrace den exakta orsaken: applikationen hann inte förbereda bufferten, SurfaceFlinger väntade på VSync eller HWC kunde inte komponera lagren. Frame Lifecycle på tidslinjen är färgkodad efter status: grön (i tid), gul (försening), röd (hoppad). Denna visualisering är det främsta verktyget för att optimera UI-prestanda.

Spårningskategorier

Systrace stöder över 20 spårningskategorier, som var och en innehåller en uppsättning relaterade händelser. Viktiga kategorier: gfx (grafikrendering), input (inmatningsbearbetning), view (View-system), webview (WebView), power (energiförbrukning), hal (hårdvaruabstraktion). För profilering av spel är kategorin gfx med detaljering ner till GPU-kommandon via AGI (Android GPU Inspector) användbar.

Systrace viktigaste funktioner

Systrace erbjuder en unik uppsättning funktioner för Android som inte finns i andra profilerare: systemtidslinje, mätvärden på kärnnivå och automatisk problemdetektering.

Interaktiv tidslinje

Systrace HTML-rapport innehåller en flernivå tidslinje, där varje spår motsvarar en process eller tråd. Tidsskalan kan zoomas in och ut, händelser kan klickas för att visa detaljer (varaktighet, initierande process, ytterligare argument). Färgkodning hjälper till med snabb orientering: gröna block — processarbete, blå — väntan, orange — avbrott, vit — inaktivitet.

Alert-meddelanden

Systrace analyserar automatiskt spårningen och visar Alert-meddelanden med indikation på problematiska platser. Till exempel: ”Buffer underrun — SurfaceFlinger hann inte ta emot bufferten före VSync” eller ”Long Binder transaction — 42 ms i tråden Binder_1”. Varje alert innehåller en länk till motsvarande del av tidslinjen och en rekommendation för korrigering. Detta sparar timmar av manuell analys och är en av huvudorsakerna att använda Systrace istället för manuell loggning.

Metoden Trace.beginSection

Utvecklaren kan lägga till egna markeringar i Systrace-spårningen via API:et Trace.beginSection och Trace.endSection. Detta gör det möjligt att följa exekveringen av kritiska kodavsnitt direkt på systemtidslinjen — till exempel markera början och slutet av datainläsning eller beräkning av layout. Markeringarna visas som separata block på applikationens spår och är synliga bredvid systemhändelser.

KategoriDataTypisk användning
schedKontextbyten, vilolägenTrådblockering, contention
gfxVSync, buffertberedning, HWCBildtappning, jank
binderBinder-transaktioner, latensIPC-förseningar, fjärranrop
freqCPU-frekvens, scaling governorThrottling, energiförbrukning
gfx + AGIGPU-kommandon, shadersSpelprestanda

Hur man kör Systrace

Att starta Systrace är möjligt på två sätt: via Android Studio CPU Profiler (läget ”Trace System Calls”) eller via kommandoraden med python-skriptet systrace.py från mappen platform-tools. Varje sätt har sina egna användningsscenarier.

Starta via Android Studio

Anslut enheten, öppna Profiler (View → Tool Windows → Profiler), välj din process, gå till fliken CPU, välj läget ”Trace System Calls” och tryck på Record. Efter 5–30 sekunder trycker du på Stop — Android Studio startar Systrace på enheten, väntar på slutförande och laddar resultatet. Begränsning: inspelning är endast möjlig medan Profiler är öppen, vilket är obekvämt för långa scenarier eller automatisering.

Starta från kommandoraden

För mer flexibel kontroll, använd skriptet systrace.py. Ange spårningskategorier, varaktighet och namn på utdatafilen. Exempel: insamling av gfx-, input- och sched-data under 10 sekunder. För start krävs Python 2.7+ och en ansluten enhet med USB-felsökning. På Android 12+ har Systrace ersatts av Perfetto — kommandot förblir detsamma, men skriptet omdirigerar anrop till perfetto.

bash
# Grundläggande start av systrace under 10 sekunder
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Endast kategorin gfx för UI-analys
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Konfigurera anpassade markeringar i koden

För att din kod ska visas på Systrace-tidslinjen, omge den kritiska delen med Trace.beginSection / Trace.endSection. Det är viktigt att beginSection och endSection är strikt parade — annars visar Systrace en felaktig tidslinje. I Kotlin är det bekvämt att använda inline-extension för att garantera att sektionen stängs även vid undantag.

kotlin
import android.os.Trace

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

// Användning i koden
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Läsa Systrace HTML-rapport

Systrace-rapporten är en fristående HTML-fil som kan öppnas i Chrome, Edge eller Firefox. Den innehåller en interaktiv tidslinje, en panel för val av processer, en lista med alert-meddelanden och viktiga mätvärden (bildfrekvens, CPU-användning, Binder-transaktioner). Att förstå rapportens struktur är en viktig färdighet för effektiv profilering.

Tidslinje och navigering

Tidslinjen visar tid från vänster till höger. Varje process och tråd — ett separat spår. Tangenterna W/S zoomar in/ut, A/D flyttar i tiden. Välj ett område med musen för att förstora en sektion. VSync-linjer visar bildgränser (var 16,6 ms vid 60 FPS). Om en fullständig renderingscykel inte får plats mellan två VSync-linjer — bilden har hoppats över. Var uppmärksam på SurfaceFlinger-spåret: om det är upptaget länge (orange block), saktar lagersammansättningen ner den allmänna renderingen.

Analys av alert-meddelanden

Panelen Alerts i den vänstra delen av rapporten innehåller automatiskt upptäckta problem. Varje alert är klickbar — vid klick flyttas tidslinjen till problemögonblicket. De vanligaste alert: ”Long Sync” (lång trådsynkronisering), ”Scheduling Delay” (schemats försening), ”Buffer Overrun” (buffertöverskridning i SurfaceFlinger). Om en alert visar ett värde på cirka 100 ms för Scheduling Delay, indikerar detta direkt att UI-tråden väntade på CPU på grund av bakgrundsbelastning — tunga beräkningar måste flyttas till en Worker Thread.

Frame Lifecycle och jank

För analys av hoppade bildrutor, aktivera spåren SurfaceFlinger och app.gfx. Varje bild visas som en rektangel: grön (≤16 ms), gul (16–32 ms), röd (>32 ms). Om du ser en röd rektangel på applikationsspåret, klicka på den — Systrace visar vilken metod (eller systemanrop) som överskred gränsen. Enligt Google (Android Performance Patterns, 2023) orsakas 70% av jank-problemen av lång onBindViewHolder eller frekvent GC.

Systrace vs Perfetto: övergång till nytt format

Perfetto är efterföljaren till Systrace, introducerad av Google i Android 9 (Pie) som ett experimentellt verktyg och blev det primära från och med Android 12. Perfetto använder ett modernt protobuf-dataformat, stöder långa sessioner (timmar istället för sekunder) och har ett Web UI för att visa spårningar. Låt oss gå igenom de viktigaste skillnaderna mellan de två systemen.

KriteriumSystracePerfetto
FormatHTML-rapport (trace.html)Protobuf (.trace / .perfetto-trace)
VaraktighetUpp till 60 sekunderTimmar, gigabyte data
GränssnittInbyggd HTMLWeb UI (ui.perfetto.dev)
KategorierFasta (ftrace + atrace)Utökningsbara (SQL-frågor på spårning)
MobilitetEndast AndroidAndroid, Linux, Chrome, Windows

Trots övergången till Perfetto förblir färdigheten att arbeta med Systrace relevant: på enheter upp till Android 11 används det som standard, och Perfetto behåller bakåtkompatibilitet med Systrace-kategorier. Android Studio CPU Profiler använder Perfetto för nya enheter och Systrace för gamla — transparent för användaren. För CI/CD rekommenderas Perfetto eftersom dess format är lämpligt för automatisk bearbetning via Python och SQL.

Exempel på användning av Systrace

För praktisk inlärning av Systrace, låt oss titta på två scenarier: att hitta orsaken till hoppade bildrutor vid scrollning och diagnostisera frekvent GC som blockerar UI-tråden.

Söka efter jank vid scrollning av RecyclerView

Starta Systrace med kategorin gfx under 10 sekunder, scrolla listan i applikationen. I rapporten, hitta sektioner med röda bildrutor. Klicka på den problematiska bilden och titta på app-spåret — om det finns ett block ”inflateLayout” eller “onBindViewHolder” med bredd >16 ms, ligger problemet i layoututvidgning eller databindning. Lösning: optimera layouten (minska ViewGroup-djup, ViewStub), flytta bildladdning till Glide med onAttachedToWindow.

Diagnostik av GC Throughput

Systrace med kategorierna freq och sched gör det möjligt att se hur ofta GC-cykler tränger undan UI-tråden. Hitta applikationsspåret på tidslinjen — om du ser periodiska block med varaktighet 20–50 ms med namnet ”Concurrent GC”, betyder det att sopinsamlaren arbetar för ofta. Lägg till kategorin ”dalvik” för detaljerad analys. Lösning: konvertera Bitmap till ByteBuffer, använd en objektpool (ObjectPool) för frekventa allokeringar, minska heap-fragmentering via ART-argumentet.

bash
# Start med kategorier för analys av UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Insamling med varaktighet på 30 sekunder för repeterbart test
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Vanliga frågor

Kan Systrace köras utan root-rättigheter?

Ja, för att köra Systrace krävs ingen root-åtkomst. Verktyget använder atrace, som är tillgängligt på alla enheter med aktiverad USB-felsökning. Vissa kategorier (power, freq) kan kräva systemsignatur, men de grundläggande (gfx, sched, input) fungerar på alla enheter.

Vad är den maximala storleken på en spårningsfil?

Begränsningen på 60 sekunder är relaterad till volymen på ftrace-ringbufferten — vid lång inspelning skrivs bufferten över. Perfetto tar bort denna begränsning: man kan spela in timmar och få spårningar på upp till flera gigabyte med överföring via USB eller strömmande skrivning till disk.

Varför innehåller HTML-rapporten inte data från min applikation?

Möjliga orsaker: applikationen är inte överförd till debuggable-läge, flaggan android:debuggable=”true” har inte lagts till i manifestet, eller en release-build används. Kontrollera också om kategorierna har --app=com.example.app angivet — annars fångar Systrace endast systemprocesser.

Hur lägger jag till min egen markering i Systrace från native-kod?

För C++, använd ATRACE_BEGIN och ATRACE_END från biblioteket libcutils. Inkludera header-filen och omge önskad del. Markeringen visas i Systrace på spåret för din process, vilket är särskilt användbart för analys av spelmotorer (Unity, Unreal).

Vad ersätter Systrace på Android 12+?

På Android 12 och senare, använd Perfetto. Installera perfetto-agenten på enheten via ADB, starta inspelning i JSON-format. För snabb visning, använd Perfetto Web UI (ui.perfetto.dev), och för CI — kommandexport med TraceProcessor i Python.

Sammanfattning

  • Systrace — systemtracer för Android, som arbetar på kärnnivå via ftrace och atrace
  • Visar belastning på CPU, GPU, SurfaceFlinger och Binder-transaktioner på en enda tidslinje
  • HTML-rapporten innehåller automatiska Alert-meddelanden med indikation på problem och rekommendationer
  • Start via Android Studio Profiler eller kommandorad med systrace.py
  • UI-tråden är kritisk: varje bild måste rymmas inom 16,6 ms för 60 FPS
  • På Android 12+ har Systrace ersatts av Perfetto med stöd för långa sessioner och SQL-frågor
  • Kombination av Systrace och Traceview rekommenderas för system- och applikationsprofilering

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också