HeapDumpConfiguration
– плагин, предназначенный для анализа утечек памяти в приложении. Чем полезны heap dump-s
? Путем анализа их содержимого можно выявить объекты, которые не были корректно удалены из памяти, и определить причину утечки.
Плагин отслеживает Out Of Memory (OOM)
ошибки и, если ваше приложение падает с OOM
, в момент обнаружения ошибки собирает дамп кучи. Затем происходит пересборка дампа с предварительной очисткой от контента и приватных данных. Когда приложение не используется, дамп в фоне отправляется на бэкенд, где и анализируется на предмет утечек при помощи LeakCanary Shark. Стоит заметить, что поиск направлен только на тривиальные утечки: Activity, Fragment, Service и т.д.
ВАЖНО! Пересборка и анализ heap dump-ов
происходит, когда устройством никто не пользуется. Именно поэтому все отчёты генерируются и отправляются ночью.
Сгенерированный отчёт можно найти в разделе «Сбои», указав нужную дату и выбрав тип MEMORY LEAK
. В самом отчёте содержится информация о приложении и об устройстве, на котором оно было запущено, сводка по обнаруженным утечкам и их размеру, а также данные о самих объектах, спровоцировавших утечку:
Важно понимать, что количество утечек, указанное в отчёте, может ок азаться существенно меньше реальной величины. Процессинг heap dump-ов
занимает продолжительное время, и Tracer может принимать не больше 500 дампов в день, из-за чего количество утечек, которые попадают в MEMORY LEAK
, ограничено. Иногда на диске пользователя может оказаться недостаточно места для хранения полного дампа до его процессинга, поэтому не каждый OOM
крэш сопровождается дампом на сервере Tracer. В связи с этим не стоит сранивать MEMORY LEAK
по количеству с другими типами ошибок – только между собой.
Для обнаружения специфичных ситуаций и нетривиальных утечек, с которыми не может справиться Shark, существует инструмент «Утечки памяти». Здесь хранятся первые 100 heap dump-ов
вашего проекта за выбранный период, и возможно наглядно соотнести размер выведенного дампа и количество найденных утечек. Рекомендуется обращать внимание на дампы с максимальным размером и минимальным количеством утечек, ведь проблема может крыться и в бизнес-логике приложения, к которой плагин не имеет доступа:
Отчёт об утечках содержит данные о приложении и об устройстве, на котором оно было запущено, и предоставляет сводку по обнаруженным утечкам, их размеру, количеству и объектах, спровоцировавших утечку:
При необходимости вы можете скачать дамп, чтобы исследовать его с помощью программ для анализа Java heap dump-ов
. Мы рекомендуем пользоваться Android Studio или VisualVM.
Таким образом, плагин позволяет обнаружить и исправить различные проблемы, связанные с управлением памятью в вашем приложении, а в перспективе – оптимизировать использование памяти и производительность приложения в целом.
В вашем <project>/<app-module>/build.gradle.kts
:
dependencies { implementation(platform("ru.ok.tracer:tracer-platform:0.5.1")) implementation("ru.ok.tracer:tracer-heap-dumps") }
Более подробное описание зависимостей на странице Быстрый старт
На данный момент в HeapDumpConfiguration
есть только один активный параметр, отвечающий за его работу. Настроить его можно при помощи опции HeapDumpConfiguration.Builder
:
Опция | Описание |
---|---|
setEnabled | Отвечает за включение/выключение сбора heap dump-ов при OOM . По умолчанию включён |