Wykorzystanie pamięci (anonimowy RSS + przestrzeń wymiany)

Wykorzystanie pamięci (anonimowa pamięć RSS i przestrzeń wymiany) to wskaźnik w Android Vitals, który odzwierciedla wykorzystanie pamięci przez aplikację.

Anonimowa pamięć to pamięć, która nie jest obsługiwana przez plik w pamięci masowej, np. alokacje sterty i pamięć przydzielona za pomocą funkcji mmap. Rozmiar zestawu rezydentnego (RSS) to łączna liczba stron pamięci (współdzielonych i niewspółdzielonych) używanych przez proces, które są przechowywane w fizycznej pamięci RAM. W przypadku pamięci anonimowej system może zapisywać strony w przestrzeni wymiany (lub w zRAM na Androidzie), gdy pamięć jest obciążona.

Łączne wykorzystanie pamięci (anonimowy RSS + przestrzeń wymiany) to miara łącznej liczby stron pamięci aplikacji, które nie są obsługiwane przez plik w pamięci masowej, w tym pamięci, która jest również przechowywana przez system w przestrzeni wymiany. Śledzenie anonimowego rozmiaru zbioru roboczego i pamięci wymiany zapewnia wgląd w rzeczywiste, nieusuwalne wykorzystanie pamięci aplikacji.

Identyfikowanie wysokiego wykorzystania pamięci

Android Vitals

Android Vitals udostępnia dane o wykorzystaniu pamięci przez aplikację podzielone według tych stanów procesu:

  • Pierwszy plan: proces aplikacji jest widoczny. Wysoki odsetek P99 często wpływa na wydajność odczuwaną przez użytkowników (zacinanie się lub awarie z powodu braku pamięci) i jest w dużej mierze spowodowany zachowywaniem komponentów interfejsu lub działań, które nie są już potrzebne.
  • Usługi widoczne dla użytkowników: proces aplikacji jest uruchomiony w stanie zauważalnym. Obejmuje to usługi na pierwszym planie, przyspieszone zadania i zadania przesyłania danych inicjowane przez użytkownika. Może to również dotyczyć usług powiązanych z systemem lub usług powiązanych z innymi aplikacjami. Usługi te są przeznaczone do długotrwałych zadań, więc utrzymywanie pamięci z powodu wycieków lub nieuwalnianie zasobów może z czasem zwiększyć wartość P99.
  • Tło: aplikacja uruchamia usługę w tle lub została niedawno przeniesiona w tło, ale nie jest jeszcze w pamięci podręcznej. To tutaj wyciekają procesy w tle i może dojść do kumulacji niezwolnionych zasobów. Ten stan procesu jest mniej ważny niż procesy na pierwszym planie lub widoczne, dlatego staraj się nie zajmować w nim dużej ilości pamięci.
  • W pamięci podręcznej: aplikacja jest w stanie pamięci podręcznej. Ten stan jest bardzo wrażliwy na wykorzystanie pamięci systemowej, np. na LMK. Ponieważ system operacyjny może w dowolnym momencie usunąć ten stan procesu, jest on udostępniany tylko do celów debugowania.

Aby dowiedzieć się, jak te stany procesu są powiązane z wywołaniami zwrotnymi onTrimMemory, zapoznaj się z wskazówkami dotyczącymi zwalniania pamięci w odpowiedzi na zdarzenia.

Android Vitals dzieli też wykorzystanie pamięci przez aplikację na zasobniki RAM. Dane o wykorzystaniu pamięci są wyświetlane jako oś czasu z dziennymi wartościami percentyli, a także z najnowszymi dziennymi wartościami 50. i 90. percentyla.

Wykrywanie wycieków pamięci za pomocą odchylenia ogona

Aby wykryć wycieki pamięci, w Android Vitals poszukaj rozbieżności między typowymi (P50) a końcowymi (P90) użytkownikami. Ogólne zwiększenie rozmiaru zasobów powoduje równomierne zwiększenie zużycia pamięci we wszystkich percentylach, natomiast wycieki pamięci narastają z czasem, co powoduje duże odchylenia w danych na końcu zakresu.

Wartości P90 i P99 należy porównać z wartością odniesienia P50 według nazwy procesu. Jeśli stosunek wartości P90 do P50 przekracza 3,5, oznacza to prawdopodobny wyciek pamięci podczas dłuższych sesji. W niektórych przypadkach użycia podwyższony współczynnik nie zawsze wskazuje na wyciek pamięci, ale należy ocenić konkretny przepływ pracy, aby określić, czy zwiększone wykorzystanie pamięci jest oczekiwanym zachowaniem.