Informacje o pamięci Androida i rozwiązywanie problemów z nią związanych

Pamięć to krytyczny i ograniczony zasób na urządzeniach z Androidem. Jako deweloper platformy Android lub producent OEM musisz rozumieć, jak działa pamięć na każdym poziomie – od środowiska wykonawczego Java po jądro systemu Linux. Jest to niezbędne do tworzenia wydajnych i stabilnych systemów.

Ten przewodnik zawiera kompleksowe omówienie architektury pamięci Androida, narzędzi dostępnych do analizy oraz ćwiczeń praktycznych, które pomogą Ci identyfikować i rozwiązywać problemy związane z pamięcią.

Cele

Po przeczytaniu tego przewodnika będziesz w stanie:

  • wyjaśnić podstawowe pojęcia związane z pamięcią Androida, w tym model procesu Zygote i pliki mapowane w pamięci;
  • rozróżnić rozmiar zbioru rezydentnego (RSS), proporcjonalny rozmiar zbioru (PSS) i unikalny rozmiar zbioru (USS);
  • używać standardowych narzędzi wiersza poleceń, takich jak dumpsys meminfo i showmap, aby szybko ocenić wykorzystanie pamięci;
  • przechwytywać i analizować zrzuty sterty Java za pomocą AHAT, aby znajdować wycieki i nadmierne alokacje;
  • używać Perfetto i heapprofd do profilowania pamięci Java i natywnej w całym systemie;
  • rozumieć wskaźniki obciążenia pamięci w całym systemie, takie jak informacje o wstrzymaniu z powodu obciążenia (PSI), i monitorować aktywność mechanizmu Low Memory Killer (LMK);
  • obserwować aktywność odzyskiwania pamięci na poziomie jądra, w tym wymianę ZRAM i usuwanie z pamięci podręcznej stron.

Struktura przewodnika

Ten przewodnik jest podzielony na te sekcje, które należy czytać po kolei:

  1. Podstawowe pojęcia: podstawowe zasady techniczne dotyczące pamięci Androida.
  2. Narzędzia do szybkiej oceny: używanie meminfo, showmap, i procstats do szybkiego triage.
  3. Analizowanie pamięci Java: szczegółowe analizy sterty Java za pomocą AHAT.
  4. Mapy bitowe i pamięć: zrozumienie, jak obrazy wpływają na pamięć RAM i używanie narzędzi do ich profilowania.
  5. Analizowanie pamięci natywnej: profilowanie pamięci C/C++ za pomocą Perfetto i heapprofd.
  6. WebView i pamięć: zrozumienie architektury wieloprocesowej i wykorzystania pamięci WebView.
  7. Kod aplikacji to pamięć: zrozumienie, jak wczytywanie klas i nadmiar kodu DEX wpływają na pamięć RAM.
  8. Wątki i pamięć: analizowanie kosztów stosów wątków natywnych.
  9. Lokalność pamięci i wydajność: zrozumienie, jak wzorce dostępu do danych wpływają na wydajność procesora.
  10. Powiązania usług i stany procesów: zrozumienie, jak zależności między procesami wpływają na wyniki OOM.
  11. Rozwiązywanie problemów w całym systemie: monitorowanie PSI, LMK, wymiany ZRAM i usuwania z pamięci podręcznej stron.
  12. Odzyskiwanie pamięci: usuwanie i wymiana: zrozumienie memcg, obciążenia i proaktywnego odzyskiwania pamięci za pomocą memory.reclaim.
  13. Interakcja kswapd i lmkd: zrozumienie, jak kswapd i lmkd współpracują pod obciążeniem.

Wymagania wstępne i środowisko

Ten przewodnik zawiera przykładowe przepływy pracy, dane porównawcze i studia przypadków, które pokazują, jak diagnozować i rozwiązywać problemy z pamięcią Androida.

  • Narzędzia do analizy: techniki opisane w tym przewodniku wykorzystują głównie standardowe narzędzia do analizy wydajności Androida, w tym Perfetto, dumpsys meminfo, showmap, i AHAT.
  • Uprawnienia roota: niektóre przepływy pracy diagnostycznej na poziomie systemu (np. sprawdzanie obciążenia pamięci jądra lub liczników PMU sprzętu) wymagają podwyższonych uprawnień roota (adb root) na urządzeniu userdebug lub w emulatorze build.

Zacznij tutaj: podstawowe pojęcia