Systrace — какво е, инструмент за системно проследяване на Android

Автор: IT Sectr Публикувано: 2026-03-31 Време за четене: 9 мин

Systrace е инструмент за системно проследяване на Android, който събира данни за работата на ядрото на Linux, процесора, графичния ускорител и всички системни процеси за кратък период от време. За разлика от Traceview, който се фокусира върху методите вътре в приложението, Systrace показва системната картина: натоварването на всяко CPU ядро, работата на SurfaceFlinger, Binder-извикванията и GC-циклите. Според Google, 2024, инструментът е незаменим за диагностициране на пропуснати кадри, често събиране на отпадъци и аномалии в UI нишката.

Основни точки

  • Systrace — инструмент за ниско ниво на системно проследяване на Android, работещ чрез atrace/ftrace
  • Следи съдържат данни за CPU, GPU, нишки, SurfaceFlinger и Binder за период до 60 секунди
  • Анализът позволява да видите точната причина за пропуснати кадри и блокиране на UI нишката
  • Интеграция с Android Studio и команден ред за гъвкаво улавяне и автоматизация
  • Perfetto — наследник на Systrace на Android 12+, използващ общ протобуферен формат

Какво е Systrace

Systrace е инструмент от команден ред от Android SDK, който улавя и комбинира данни от множество източници на проследяване на ядрото (ftrace) и потребителското пространство (atrace) в единен HTML отчет. Инструментът се появи в Android 4.1 (Jelly Bean) като замяна на стария инструмент traceview за системно профилиране и дълго време оставаше стандартното средство за диагностика на производителност на платформата Android.

Архитектура на Systrace

Systrace разчита на ftrace — механизъм за проследяване на ядрото на Linux, достъпен в Android от версия 4.1. При стартиране Systrace активира зададени категории следи: sched (планировчик на задачи), freq (честота на CPU), idle (състояния на празен ход), workq (работни опашки), binder, gfx и други. Данните се събират в цикличен буфер на ядрото и след спиране се обединяват в един файл trace.html, който се отваря във всеки браузър.

Systrace в контекста на Android Studio

От Android Studio 3.1, Systrace е вграден в CPU Profiler. В режим “Trace System Calls” профилерът стартира Systrace на свързаното устройство и показва резултатите директно в прозореца на Android Studio. Това елиминира необходимостта от работа с команден ред за основни случаи, като същевременно запазва пълната функционалност — всички категории следи, филтриране и интерактивна времева линия. Производителността на устройството по време на проследяване намалява леко, тъй като ftrace е проектиран за минимално натоварване.

Как работи Systrace

Systrace използва два механизма за събиране на данни: ftrace на ниво ядро за системни събития и atrace в потребителското пространство за специфични за Android маркери. ftrace регистрира превключвания на контекст (sched_switch), промени на честотата на CPU (cpu_frequency), прекъсвания (irq_handler_entry) и други събития. atrace добавя маркери от Android рамката — начало и край на рендериране на кадър, извиквания на SurfaceFlinger и Binder транзакции.

Верига за рендериране на кадър в Systrace

Ключова възможност на Systrace — визуализация на веригата за рендериране на всеки кадър: приложение → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Ако на някой етап възникне забавяне, Systrace показва точната причина: приложението не успя да подготви буфера, SurfaceFlinger чакаше VSync или HWC не можа да композира слоевете. Frame Lifecycle на времевата линия е оцветен според статусите: зелено (навреме), жълто (забавяне), червено (пропускане). Тази визуализация е основният инструмент за оптимизиране на производителността на UI.

Категории следи

Systrace поддържа над 20 категории следи, всяка от които включва набор от свързани събития. Важни категории: gfx (рендериране на графика), input (обработка на вход), view (система View), webview (WebView), power (консумация на енергия), hal (хардуерна абстракция). За профилиране на игри е полезна категорията gfx с детайлизация до GPU команди чрез AGI (Android GPU Inspector).

Ключови възможности на Systrace

Systrace предоставя уникален за Android набор от възможности, които не са достъпни в други профилери: системна времева линия, метрики на ниво ядро и автоматично откриване на проблеми.

Интерактивна времева линия

HTML отчетът на Systrace съдържа многослойна времева линия, където всяка пътека съответства на един процес или нишка. Времевата скала може да се приближава и отдалечава, събитията могат да се кликват за преглед на детайли (продължителност, иницииращ процес, допълнителни аргументи). Цветовото кодиране помага за бързо ориентиране: зелени блокове — работа на процеса, сини — изчакване, оранжеви — прекъсване, бели — празен ход.

Alert съобщения

Systrace автоматично анализира следата и показва Alert съобщения с посочване на проблемните места. Например: “Buffer underrun — SurfaceFlinger не успя да получи буфера преди VSync” или “Long Binder transaction — 42 ms в нишка Binder_1”. Всяко alert съдържа връзка към съответния участък от времевата линия и препоръка за корекция. Това спестява часове ръчен анализ и е една от основните причини да използвате Systrace вместо ръчно логване.

Метод Trace.beginSection

Разработчикът може да добавя свои собствени маркери в Systrace следата чрез API Trace.beginSection и Trace.endSection. Това позволява проследяване на изпълнението на критични участъци от код директно на системната времева линия — например, маркиране на началото и края на зареждане на данни или изчисляване на оформление. Маркерите се показват като отделни блокове на пътеката на приложението и са видими до системните събития.

КатегорияДанниТипично приложение
schedПревключвания на контекст, състояния на празен ходБлокиране на нишки, contention
gfxVSync, подготовка на буфер, HWCПропуснати кадри, jank
binderBinder транзакции, латентностIPC забавяния, отдалечени извиквания
freqЧестота на CPU, scaling governorThrottling, консумация на енергия
gfx + AGIGPU команди, шейдъриПроизводителност на игри

Как да стартирате Systrace

Стартирането на Systrace е възможно по два начина: чрез Android Studio CPU Profiler (режим “Trace System Calls”) или чрез команден ред с помощта на python скрипта systrace.py от папката platform-tools. Всеки начин има свои сценарии на приложение.

Стартиране чрез Android Studio

Свържете устройството, отворете Profiler (View → Tool Windows → Profiler), изберете вашия процес, отидете на раздела CPU, изберете режим “Trace System Calls” и натиснете Record. След 5–30 секунди натиснете Stop — Android Studio ще стартира Systrace на устройството, ще изчака завършване и ще зареди резултата. Ограничение: записът е възможен само докато Profiler е отворен, което е неудобно за дълги сценарии или автоматизация.

Стартиране от команден ред

За по-гъвкав контрол използвайте скрипта systrace.py. Посочете категориите следи, продължителността и името на изходния файл. Пример: улавяне на данни gfx, input и sched за 10 секунди. За стартиране е необходим Python 2.7+ и свързано устройство с USB отстраняване на грешки. На Android 12+ Systrace е заменен от Perfetto — командата остава същата, но скриптът пренасочва извикванията към perfetto.

bash
# Основно стартиране на systrace за 10 секунди
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Само категория gfx за анализ на UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Настройка на потребителски маркери в кода

За да се появи вашият код на времевата линия на Systrace, обвийте критичния участък в Trace.beginSection / Trace.endSection. Важно е beginSection и endSection да бъдат строго сдвоени — иначе Systrace ще покаже неправилна времева линия. В Kotlin е удобно да използвате inline-extension, за да гарантирате затваряне на секцията дори при изключение.

kotlin
import android.os.Trace

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

// Използване в кода
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Четене на HTML отчета на Systrace

Отчетът на Systrace е самостоятелен HTML файл, който може да се отвори в Chrome, Edge или Firefox. Той съдържа интерактивна времева линия, панел за избор на процеси, списък с alert съобщения и ключови метрики (честота на кадрите, използване на CPU, Binder транзакции). Разбирането на структурата на отчета е ключово умение за ефективно профилиране.

Времева линия и навигация

Времевата линия показва времето отляво надясно. Всеки процес и нишка — отделна пътека. Клавишите W/S приближават/отдалечават, A/D преместват във времето. Изберете област с мишката за увеличение на участък. VSync линиите показват границите на кадрите (на всеки 16.6 ms при 60 FPS). Ако между две VSync линии не се побира пълен цикъл на рендериране — кадърът е пропуснат. Обърнете внимание на пътеката SurfaceFlinger: ако е дълго заета (оранжев блок), композицията на слоеве забавя общото рендериране.

Анализ на alert съобщения

Панелът Alerts в лявата част на отчета съдържа автоматично открити проблеми. Всяко alert е кликаемо — при кликване времевата линия се премества към проблемния момент. Най-честите alert: “Long Sync” (дълга синхронизация на нишка), “Scheduling Delay” (забавяне на планировчика), “Buffer Overrun” (препълване на буфера на SurfaceFlinger). Ако alert показва стойност около 100 ms за Scheduling Delay, това директно показва, че UI нишката е чакала CPU поради фонова натовареност — трябва да преместите тежките изчисления в Worker Thread.

Frame Lifecycle и jank

За анализ на пропуснати кадри включете пътеките SurfaceFlinger и app.gfx. Всеки кадър се показва като правоъгълник: зелен (≤16 ms), жълт (16–32 ms), червен (>32 ms). Ако видите червен правоъгълник на пътеката на приложението, кликнете върху него — Systrace ще покаже кой точно метод (или системно извикване) е превишил лимита. Според Google (Android Performance Patterns, 2023), 70% от jank проблемите са причинени от дълъг onBindViewHolder или чест GC.

Systrace срещу Perfetto: преход към нов формат

Perfetto е наследникът на Systrace, представен от Google в Android 9 (Pie) като експериментален инструмент и станал основен от Android 12. Perfetto използва модерен протобуферен формат на данни, поддържа дълги сесии (часове вместо секунди) и има Web UI за преглед на следи. Нека разгледаме ключовите разлики между двете системи.

КритерийSystracePerfetto
ФорматHTML отчет (trace.html)Протобуфер (.trace / .perfetto-trace)
ПродължителностДо 60 секундиЧасове, гигабайти данни
ИнтерфейсВграден HTMLWeb UI (ui.perfetto.dev)
КатегорииФиксирани (ftrace + atrace)Разширяеми (SQL заявки към следата)
МобилностСамо AndroidAndroid, Linux, Chrome, Windows

Въпреки прехода към Perfetto, умението за работа със Systrace остава актуално: на устройства до Android 11 се използва по подразбиране, а Perfetto запазва обратна съвместимост с категориите на Systrace. Android Studio CPU Profiler използва Perfetto за нови устройства и Systrace за стари — прозрачно за потребителя. За CI/CD се препоръчва използването на Perfetto, тъй като неговият формат е подходящ за автоматична обработка чрез Python и SQL.

Примери за използване на Systrace

За практическо усвояване на Systrace разгледайте два сценария: намиране на причината за пропуснати кадри при скролване и диагностика на чест GC, който блокира UI нишката.

Търсене на jank при превъртане на RecyclerView

Стартирайте Systrace с категория gfx за 10 секунди, превъртете списъка в приложението. В отчета намерете участъци с червени кадри. Кликнете върху проблемния кадър и погледнете пътеката app — ако там има блок “inflateLayout” или “onBindViewHolder” с ширина >16 ms, проблемът е в раздуването на оформлението или свързването на данни. Решение: оптимизирайте оформлението (намалете дълбочината на ViewGroup, ViewStub), преместете зареждането на изображения в Glide с onAttachedToWindow.

Диагностика на GC Throughput

Systrace с категория freq и sched позволява да видите колко често GC циклите изместват UI нишката. Намерете пътеката на приложението на времевата линия — ако виждате периодични блокове с продължителност 20–50 ms с име “Concurrent GC”, значи събирачът на отпадъци работи твърде често. Добавете категория “dalvik” за подробен анализ. Решение: конвертирайте Bitmap в ByteBuffer, използвайте обектен пул (ObjectPool) за чести алокации, намалете фрагментацията на хипа чрез аргумент на ART.

bash
# Стартиране с категории за анализ на UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Улавяне с продължителност 30 секунди за възпроизводим тест
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Често задавани въпроси

Може ли Systrace да се стартира без root права?

Да, за стартиране на Systrace не е необходим root достъп. Инструментът използва atrace, който е достъпен на всяко устройство с включено USB отстраняване на грешки. Някои категории (power, freq) може да изискват подпис на системата, но основните (gfx, sched, input) работят на всички устройства.

Какъв е максималният размер на файла със следа?

Ограничението от 60 секунди е свързано с обема на цикличния буфер на ftrace — при дълъг запис буферът се презаписва. Perfetto премахва това ограничение: можете да записвате часове и да получавате следи с размер до няколко гигабайта с прехвърляне по USB или поточно записване на диск.

Защо в HTML отчета няма данни от моето приложение?

Възможни причини: приложението не е превключено в debuggable режим, не е добавен флагът android:debuggable=”true” в манифеста или се използва release версия. Също проверете дали в категориите е посочено --app=com.example.app — иначе Systrace улавя само системни процеси.

Как да добавя собствен маркер в Systrace от native код?

За C++ използвайте ATRACE_BEGIN и ATRACE_END от библиотеката libcutils. Включете заглавния файл и обвийте желания участък. Маркерът ще се появи в Systrace на пътеката на вашия процес, което е особено полезно за анализ на игрови двигатели (Unity, Unreal).

С какво да заменя Systrace на Android 12+?

На Android 12 и по-нови версии използвайте Perfetto. Инсталирайте perfetto агента на устройството чрез ADB, стартирайте запис в JSON формат. За бърз преглед използвайте Perfetto Web UI (ui.perfetto.dev), а за CI — команден експорт с TraceProcessor на Python.

Обобщение

  • Systrace — системен трасер на Android, работещ на ниво ядро чрез ftrace и atrace
  • Показва натоварването на CPU, GPU, SurfaceFlinger и Binder транзакции на единна времева линия
  • HTML отчетът съдържа автоматични Alert съобщения с посочване на проблеми и препоръки
  • Стартиране чрез Android Studio Profiler или команден ред с systrace.py
  • UI нишката е критична: всеки кадър трябва да се побира в 16.6 ms за 60 FPS
  • На Android 12+ Systrace е заменен от Perfetto с поддръжка на дълги сесии и SQL заявки
  • Препоръчва се комбиниране на Systrace и Traceview за системно и приложно профилиране

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също