Po pobraniu profilu z urządzenia testowego lub z backendu możesz otworzyć plik w interfejsie Perfetto, aby sprawdzić osie czasu, stany wątków i wykresy przechowywania pamięci. Na tej stronie opisano, jak poruszać się po usuniętych śladach systemu i zrzutach sterty Javy przechwyconych za pomocą ProfilingManager.
Wizualizacja śledzenia systemu
Otwórz plik .perfetto-trace w interfejsie Perfetto, aby sprawdzić aktywność procesora i wątków w czasie.
Aby chronić prywatność użytkowników, ProfilingManager usuwa śledzenie systemu, łącząc aktywność procesora ze wszystkich innych procesów w jedną ścieżkę OtherProcesses.
Sprawdzenie tej połączonej ścieżki nadal pozwala określić, czy powolne działanie aplikacji było spowodowane wewnętrznym wąskim gardłem czy ogólnym obciążeniem urządzenia.
Rysunek 2 przedstawia główne sekcje śledzenia systemu po usunięciu danych:
- Lista procesorów: wyświetla wszystkie dostępne procesory na urządzeniu.
- Zadania procesora: pokazuje, które wątki były wykonywane przez poszczególne procesory.
- Widok innych procesów: wyświetla zasoby procesora wykorzystywane przez inne procesy.
- Widok procesu: pokazuje proces aplikacji.
- Widok wątków: wyświetla wątki działające w procesie i ich stany (wykonywalny (R), działający (R), uśpiony (S), nieprzerywalny uśpiony (D)), które są bezpośrednio mapowane na stany procesów Linuksa.
- Wycinki logu czasu: ta sekcja zawiera adnotacje logu czasu dodane przez deweloperów aplikacji lub platformę. Te adnotacje obejmują obliczenia między
Trace.beginSectionaTrace.endSection.
Więcej informacji o interfejsie Perfetto i wizualizacji śladów znajdziesz w dokumentacji Perfetto.
Wizualizacja zrzutów sterty Java
Po przechwyceniu zrzutu sterty Java za pomocą PROFILING_TYPE_JAVA_HEAP_DUMP otwórz wynikowy plik .perfetto-java-heap-dump w interfejsie Perfetto, aby zidentyfikować wycieki pamięci lub zoptymalizować wykorzystanie pamięci. W eksploratorze zrzutów pamięci możesz przeglądać wykres sterty, sprawdzać wykresy płomieniowe skumulowanych rozmiarów obiektów oraz przeglądać klasy, obiekty i dominatory, jak pokazano na rysunku 3.
Czym zrzuty sterty ProfilingManager różnią się od zrzutów HPROF
W przeciwieństwie do standardowych zrzutów stosu .hprof (np. przechwyconych za pomocą Debug.dumpHprofData lub w Android Studio) ProfilingManager przechwytuje zrzut stosu Perfetto ART (.perfetto-java-heap-dump). Zamiast zrzucać nieprzetworzoną zawartość pamięci, ProfilingManager rejestruje wykres przechowywania obiektów i metadane dotyczące rozmiaru, pomijając nieprzetworzone dane przechowywane w obiektach:
- Jakie dane są zbierane:
- Klasy i typy: nazwy klas, hierarchie klas nadrzędnych, moduły ładujące klasy, rozmiary instancji i typy referencyjne (takie jak normalne klasy, tablice, ciągi znaków lub słabe, miękkie, finalizujące i fantomowe odwołania).
- Instancje i rozmiary obiektów: zajęte miejsce każdego obiektu (
self_size), jego region sterty (HEAP_TYPE_APP,HEAP_TYPE_ZYGOTElubHEAP_TYPE_BOOT_IMAGE) i powiązana pamięć natywna zarejestrowana przezNativeAllocationRegistry. - Odwołania i korzenie GC: korzenie odzyskiwania pamięci (takie jak zmienne globalne i lokalne JNI, ramki stosu Javy i obiekty wątków) oraz łańcuchy odwołań na poziomie pola, które pokazują, który obiekt przechowuje inny obiekt i za pomocą jakiej nazwy pola.
- Wybierz metadane dotyczące rozmiaru: metadane niepoufne dotyczące konkretnych typów platform, takie jak wymiary
Bitmap(mWidthimHeight).
- Co jest pomijane: rzeczywiste wartości pól podstawowych, zawartość znaków
Stringi nieprzetworzone ładunki tablic (byte[],char[]i inne tablice podstawowe). Pominięcie nieprzetworzonej zawartości obiektów chroni prywatność użytkowników na urządzeniach produkcyjnych i znacznie zmniejsza rozmiar plików zrzutu.
Dalsze kroki
Oprócz kontroli wizualnej w interfejsie Perfetto możesz wykonywać zapytania dotyczące profili za pomocą PerfettoSQL, analizować ślady zbiorczo lub analizować profile za pomocą AI.