Понимание и устранение неполадок с памятью Android.

Память — это критически важный и ограниченный ресурс на устройствах под управлением Android. Для разработчика платформы Android или производителя оборудования понимание того, как работает память на каждом уровне — от среды выполнения Java до ядра Linux — имеет решающее значение для создания производительной и стабильной системы.

В этом руководстве представлен исчерпывающий обзор архитектуры памяти Android, доступных инструментов для анализа, а также практические упражнения, которые помогут вам выявить и устранить проблемы, связанные с памятью.

Цели

После изучения этого руководства вы сможете:

  • Объясните основные понятия памяти Android, включая процессную модель Zygote и файлы, отображаемые в память.
  • Различите понятия Resident Set Size (RSS), Proportional Set Size (PSS) и Unique Set Size (USS).
  • Используйте стандартные инструменты командной строки, такие как dumpsys meminfo и showmap , чтобы быстро оценить использование памяти.
  • С помощью AHAT можно собирать и анализировать дампы кучи Java для обнаружения утечек памяти и чрезмерного выделения памяти.
  • Используйте Perfetto и heapprofd для профилирования памяти Java и нативной памяти по всей системе.
  • Разберитесь в общесистемных индикаторах нехватки памяти, таких как информация о задержках из-за низкого уровня памяти (PSI), и отслеживайте активность механизма Low Memory Killer (LMK).
  • Проанализируйте активность по освобождению ресурсов на уровне ядра, включая подкачку ZRAM и вытеснение страниц из кэша.

Руководящая структура

Данное руководство разделено на следующие разделы, которые следует читать последовательно:

  1. Основные понятия : ключевые технические принципы работы памяти Android.
  2. Инструменты для быстрой оценки : использование meminfo , showmap и procstats для оперативной сортировки запросов.
  3. Анализ памяти Java : подробное изучение кучи Java с помощью AHAT.
  4. Растровые изображения и память : понимание того, как изображения влияют на оперативную память, и использование инструментов для их профилирования.
  5. Анализ нативной памяти : профилирование памяти C/C++ с помощью Perfetto и heapprofd .
  6. WebView и память : понимание многопроцессной архитектуры и объема памяти, используемого WebView.
  7. Код приложения — это память : понимание того, как загрузка классов и раздувание dex-файлов влияют на оперативную память.
  8. Потоки и память : анализ стоимости нативных стеков потоков.
  9. Локальность памяти и производительность : понимание того, как шаблоны доступа к данным влияют на производительность ЦП.
  10. Привязки сервисов и состояния процессов : понимание того, как межпроцессные зависимости влияют на показатели нехватки памяти (OOM).
  11. Системная диагностика и устранение неполадок : мониторинг PSI, LMK, ZRAM-файла подкачки и вытеснения страниц из кэша.
  12. Освобождение памяти: вытеснение и подкачка : понимание memcg, charge и проактивного высвобождения памяти с помощью memory.reclaim .
  13. Взаимодействие kswapd и lmkd : понимание того, как kswapd и lmkd работают вместе под давлением.

Предварительные условия и окружающая среда

В этом руководстве представлены типовые рабочие процессы, данные сравнительных тестов и примеры из практики, демонстрирующие, как диагностировать и устранять проблемы с памятью в Android.

  • Инструменты анализа : В данном руководстве в основном используются стандартные инструменты анализа производительности Android, включая Perfetto , dumpsys meminfo , showmap и AHAT .
  • Права root : Для некоторых диагностических процессов на системном уровне (например, для проверки загрузки памяти ядра или аппаратных счетчиков PMU) требуются повышенные права root ( adb root ) на устройстве userdebug или в эмуляторе.

Начните здесь: Основные понятия