Wizualizacja profili w interfejsie Perfetto

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.

Oś czasu śledzenia systemu z usuniętymi danymi w interfejsie Perfetto
Rysunek 1. Przykład logu z usuniętymi danymi.

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:

Ponumerowane sekcje zredagowanego śledzenia systemu w interfejsie Perfetto
Rysunek 2. Sekcje zredagowanego logu czasu oczekiwania.
  1. Lista procesorów: wyświetla wszystkie dostępne procesory na urządzeniu.
  2. Zadania procesora: pokazuje, które wątki były wykonywane przez poszczególne procesory.
  3. Widok innych procesów: wyświetla zasoby procesora wykorzystywane przez inne procesy.
  4. Widok procesu: pokazuje proces aplikacji.
  5. 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.
  6. Wycinki logu czasu: ta sekcja zawiera adnotacje logu czasu dodane przez deweloperów aplikacji lub platformę. Te adnotacje obejmują obliczenia między Trace.beginSection a Trace.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.

Eksplorator zrzutów sterty w interfejsie Perfetto z wykresem płomieniowym rozmiarów obiektów sterty Javy.
Rysunek 3. Wykres płomieniowy zrzutu sterty Java w interfejsie Perfetto.

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_ZYGOTE lub HEAP_TYPE_BOOT_IMAGE) i powiązana pamięć natywna zarejestrowana przez NativeAllocationRegistry.
    • 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 (mWidth i mHeight).
  • Co jest pomijane: rzeczywiste wartości pól podstawowych, zawartość znaków String i 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.