Получив профиль с тестового устройства или скачав его из серверной части, вы можете открыть файл в интерфейсе Perfetto, чтобы изучить временные шкалы, состояния потоков и графики удержания памяти. В этой статье рассказывается, как работать с отредактированными трассировками системы и дампами кучи Java, полученными с помощью ProfilingManager.
Визуализация трассировок системы
Откройте файл .perfetto-trace в Perfetto UI, чтобы проверить активность ЦП и потоков за определенный период времени.
Чтобы защитить конфиденциальность пользователя, ProfilingManager удаляет трассировки системы, объединяя данные о работе ЦП, полученные от всех остальных процессов, в одну дорожку OtherProcesses.
Проверка этой комбинированной дорожки по-прежнему позволяет определить, была ли медленная работа приложения вызвана внутренним узким местом или общей нагрузкой на устройство.
На рисунке 2 показаны основные разделы отредактированной трассировки системы.
- Список ЦП. Все доступные процессоры на устройстве.
- Задачи ЦП. Показывает, какие потоки выполнял каждый ЦП.
- Другие процессы. Показывает ресурсы ЦП, потребляемые другими процессами.
- Process View. Показывает процесс приложения.
- Режим просмотра потоков. Показывает потоки, выполняемые в рамках процесса, и их состояния (Runnable (R), Running (R), Sleeping (S), Uninterruptible Sleep (D)), которые напрямую сопоставляются с состояниями процессов Linux.
- Фрагменты трассировки. В этом разделе показаны аннотации трассировки, добавленные разработчиками приложения или фреймворком. Эти аннотации охватывают вычисления между
Trace.beginSectionиTrace.endSection.
Подробную информацию об интерфейсе Perfetto и визуализации трассировки можно найти в документации Perfetto.
Визуализация дампов кучи Java
Получив дамп кучи Java с помощью PROFILING_TYPE_JAVA_HEAP_DUMP, откройте файл .perfetto-java-heap-dump в Perfetto UI, чтобы выявить утечки памяти или оптимизировать использование памяти. В Heapdump Explorer можно изучить граф кучи, посмотреть флейм-графы совокупных размеров объектов, а также просмотреть классы, объекты и доминаторы, как показано на рисунке 3.
Чем дампы кучи ProfilingManager отличаются от дампов HPROF
В отличие от стандартных дампов кучи .hprof (например, полученных с помощью Debug.dumpHprofData или в Android Studio), ProfilingManager создает дамп кучи Perfetto ART (.perfetto-java-heap-dump). Вместо необработанного содержимого памяти ProfilingManager записывает граф хранения объектов и метаданные о размерах, опуская необработанные данные, хранящиеся внутри объектов:
- Какие данные собираются:
- Классы и типы. Названия классов, иерархии надклассов, загрузчики классов, размеры экземпляров и типы ссылок (например, обычные классы, массивы, строки, а также слабые, мягкие, фантомные ссылки и ссылки на финализаторы).
- Экземпляры и размеры объектов. Объем памяти, занимаемый каждым объектом (
self_size), его область кучи (HEAP_TYPE_APP,HEAP_TYPE_ZYGOTEилиHEAP_TYPE_BOOT_IMAGE) и связанная нативная память, зарегистрированная черезNativeAllocationRegistry. - Ссылки и корневые объекты сборщика мусора. Корневые объекты сборщика мусора (например, глобальные и локальные объекты JNI, стековые фреймы Java и объекты потоков) и цепочки ссылок на уровне полей, показывающие, какой объект удерживает другой объект и через какое имя поля.
- Выбрать метаданные о размерах. Неконфиденциальные метаданные для определенных типов фреймворков, например размеры
Bitmap(mWidthиmHeight).
- Что не включается. Фактические значения примитивных полей, содержимое символов
Stringи необработанные полезные нагрузки массивов (byte[],char[]и другие примитивные массивы). Это позволяет защитить конфиденциальность пользователей на рабочих устройствах и значительно уменьшить размер файлов дампа.
Дальнейшие действия
Помимо визуального анализа в Perfetto UI, вы можете запрашивать профили с помощью PerfettoSQL, анализировать трассировки в массовом порядке или анализировать профили с помощью ИИ.