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 мс в потоке Binder_1". Каждая alert содержит ссылку на соответствующий участок таймлайна и рекомендацию по исправлению. Это экономит часы ручного анализа и является одной из главных причин использовать Systrace вместо ручного логирования.

Метод Trace.beginSection

Разработчик может добавлять собственные метки в Systrace-трейс через API Trace.beginSection и Trace.endSection. Это позволяет проследить выполнение критических участков кода прямо на системном таймлайне — например, отметить начало и конец загрузки данных или расчёта макета. Метки отображаются как отдельные блоки на дорожке приложения и видны рядом с системными событиями.

КатегорияДанныеТипичное применение
schedПереключения контекста, idle-состоянияБлокировки потоков, contention
gfxVSync, подготовка буфера, HWCFrame drops, jank
binderBinder-транзакции, latencyIPC-задержки, remote calls
freqЧастота CPU, scaling governorТроттлинг, энергопотребление
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-сообщений и ключевые метрики (frame rate, CPU usage, binder transactions). Понимание структуры отчёта — ключевой навык для эффективного профилирования.

Таймлайн и навигация

Таймлайн отображает время слева направо. Каждый процесс и поток — отдельная дорожка. Клавиши W/S приближают/отдаляют, A/D перемещают по времени. Выделите область мышью для увеличения участка. VSync-линии показывают границы кадров (каждые 16.6 мс при 60 FPS). Если между двумя VSync-линиями не влезает полный цикл отрисовки — кадр пропущен. Обращайте внимание на дорожку SurfaceFlinger: если она долго занята (оранжевый блок), значит, композиция слоёв тормозит общую отрисовку.

Анализ alert-сообщений

Панель Alerts в левой части отчёта содержит автоматически обнаруженные проблемы. Каждая alert кликабельна — при клике таймлайн перемещается к проблемному моменту. Самые частые alert: "Long Sync" (долгая синхронизация потока), "Scheduling Delay" (задержка планировщика), "Buffer Overrun" (переполнение буфера SurfaceFlinger). Если alert показывает значение у 100 мс для Scheduling Delay, это прямо указывает на то, что UI-поток ждал CPU из-за фоновой нагрузки — нужно перенести тяжёлые вычисления в Worker Thread.

Frame Lifecycle и jank

Для анализа пропущенных кадров включите дорожки SurfaceFlinger и app.gfx. Каждый кадр отображается как прямоугольник: зелёный (≤16 мс), жёлтый (16–32 мс), красный (>32 мс). Если вы видите красный прямоугольник на дорожке приложения, кликните на него — Systrace покажет, какой именно метод (или системный вызов) превысил лимит. По данным Google (Android Performance Patterns, 2023), 70% jank-проблем вызваны долгим onBindViewHolder или частым GC.

Systrace vs Perfetto: переход на новый формат

Perfetto — это преемник Systrace, представленный Google в Android 9 (Pie) как экспериментальный инструмент и ставший основным начиная с Android 12. Perfetto использует современный прото-буферный формат данных, поддерживает длительные сессии (часы вместо секунд) и имеет Web UI для просмотра трейсов. Разберём ключевые отличия двух систем.

КритерийSystracePerfetto
ФорматHTML-отчёт (trace.html)Proto-буфер (.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 мс, проблема в раздутии макета или привязке данных. Решение: оптимизируйте макет (reduce deep ViewGroup, ViewStub), вынесите загрузку изображений в Glide с onAttachedToWindow.

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

Systrace с категорией freq и sched позволяет увидеть, как часто GC-циклы вытесняют UI-поток. Найдите дорожку приложения на таймлайне — если вы видите периодические блоки длительностью 20–50 мс с именем "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" в манифесте, или используется релизная сборка. Также проверьте, что в категориях указан --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 мс для 60 FPS
  • На Android 12+ Systrace заменён на Perfetto с поддержкой длительных сессий и SQL-запросов
  • Рекомендуется комбинировать Systrace и Traceview для системного + прикладного профилирования

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

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также