Jenis profil dan kapan setiap jenis profil berguna

Anda dapat merekam beberapa jenis profil performa di Android. Pengumpulan profil membantu Anda men-debug masalah terkait kecepatan aplikasi berjalan, jumlah memori yang digunakan, jumlah daya yang dikonsumsi, dan lainnya.

Dokumen ini menjelaskan jenis profil yang paling berguna dan kapan harus menggunakan setiap jenis profil untuk men-debug masalah performa umum.

Rekaman aktivitas sistem

Contoh rekaman aktivitas sistem
Gambar 1.: Contoh Pelacakan Sistem.

Rekaman aktivitas sistem adalah profil yang canggih dan berisi informasi tentang proses, thread, informasi pengaturan waktu, eksekusi CPU dan tugas, serta peristiwa yang ditentukan sistem atau pengguna.

Dari perspektif aplikasi, sifat informasi dalam rekaman aktivitas dapat mencakup berbagai area, termasuk latensi, jank, memori, baterai, dan lainnya.

Rekaman aktivitas sistem berisi peristiwa yang didorong kode berikut yang dapat ditentukan oleh sistem atau pengguna. Peristiwa yang didorong kode adalah peristiwa yang dapat dipicu pengguna melalui panggilan fungsi.

  • Bagian rekaman aktivitas: mewakili waktu antara berbagai titik dalam kode Anda. Keduanya dapat ditambahkan dengan API Trace.beginSection dan Trace.endSection.
  • Penghitung aktivitas: nilai numerik yang merepresentasikan metrik, misalnya ukuran heap. Objek ini dapat ditambahkan dengan Trace.setCounter API.

Rekaman aktivitas sistem juga berisi metrik yang dapat dibuat dari kueri PerfettoSQL dan dapat digunakan untuk melakukan analisis atau membandingkan rekaman aktivitas.

Sebaiknya gunakan rekaman aktivitas sistem untuk melakukan tugas berikut:

  • Mendiagnosis masalah latensi. Rekaman aktivitas sistem sangat berguna untuk menemukan masalah latensi yang disebabkan oleh penundaan, menunggu, atau masalah penjadwalan. Profiler lain, seperti profil berbasis sampel, tidak memberikan informasi pengaturan waktu yang diberikan oleh rekaman aktivitas sistem.

  • Menemukan komputasi duplikat. Pelacakan dapat mengungkapkan apakah perhitungan tertentu diulang, yang mungkin menunjukkan operasi yang tidak perlu.

  • Mendiagnosis masalah pertentangan kunci. Dengan informasi tentang status thread dan slice yang menunjukkan kapan resource diblokir, Anda dapat mengidentifikasi apakah kunci (seperti blok synchronized) menyebabkan penundaan dalam perjalanan pengguna.

  • Pahami multi-threading di aplikasi Anda. Rekaman aktivitas menawarkan tampilan beberapa thread, yang menampilkan status setiap thread dan slice rekaman aktivitas yang ditambahkan oleh sistem atau aplikasi Anda. Tampilan multi-thread ini membantu Anda memahami thread mana yang aktif, tidak aktif, atau apa yang sedang dijalankan dan bagaimana interaksinya.

  • Lakukan analisis performa yang kompleks. Antarmuka pengguna yang canggih dan kemampuan untuk menampilkan berbagai jenis informasi membuat rekaman aktivitas sistem berguna untuk men-debug berbagai masalah performa, termasuk latensi, memori, dan penggunaan baterai.

Rekaman aktivitas sistem juga mendukung kueri menggunakan PerfettoSQL. Fitur canggih ini memungkinkan Anda:

  • Mengekstrak data tertentu.
  • Ubah data rekaman aktivitas menjadi metrik kustom.
  • Buat jalur debug dari kueri untuk mempermudah visualisasi hal-hal yang paling penting bagi Anda di UI Perfetto.
  • Lakukan analisis kompleks langsung dalam UI Perfetto.

Profil sampel stack

Contoh profil
sampel stack
Gambar 2.: Contoh profil pengambilan sampel stack.

Profil sampel stack berfungsi dengan merekam sampel eksekusi kode dan menyimpan informasi stack panggilan pada kecepatan yang ditetapkan saat thread menjalankan tugas di CPU. Hal ini memberikan insight tentang apa yang dilakukan kode Anda selama eksekusi.

Sebaiknya gunakan sampel stack untuk melakukan hal berikut:

  • Mengoptimalkan titik interaksi. Contoh stack membantu mengidentifikasi bagian kode Anda dengan banyak aktivitas CPU, yang berarti thread sering dalam status "berjalan".
  • Memahami eksekusi kode. Contoh stack dapat membantu Anda memahami perilaku keseluruhan codebase Anda.
  • Identifikasi kode yang tidak boleh dijalankan. Anda mungkin menemukan stack panggilan yang seharusnya tidak berjalan sama sekali, yang menunjukkan peluang langsung untuk pengoptimalan.

Heap dump

Contoh heap dump
Gambar 3.: Contoh heap dump.

Heap dump Java menampilkan cuplikan memori heap Java aplikasi Anda. Snapshot ini mencakup semua objek dan cara objek tersebut merujuk satu sama lain pada saat dump diambil.

Sebaiknya kumpulkan dump heap untuk melakukan hal berikut:

  • Mengungkap objek duplikat. Heap dump menampilkan jumlah objek live, yang berguna untuk melacak objek duplikat. Referensi objek juga disediakan, sehingga membantu Anda menentukan lokasi kode tempat objek dibuat.
  • Menemukan kebocoran memori. Heap dump dapat mengungkapkan memori yang seharusnya tidak lagi digunakan saat dump diambil, yang menunjukkan potensi kebocoran memori.
  • Identifikasi objek yang dapat dioptimalkan. Dengan menampilkan objek yang menggunakan banyak memori dan jumlahnya, heap dump membantu mengidentifikasi pola penggunaan memori yang tidak efisien.

Profil heap

Contoh profil heap
Gambar 4.: Contoh profil heap.

Profil heap tersedia dalam versi native dan Java, serta sangat berguna untuk men-debug masalah memori. Sampel ini mirip dengan sampel stack panggilan, tetapi alih-alih mengukur siklus CPU, sampel ini mengambil sampel saat memori dialokasikan.

Sebaiknya gunakan profil heap untuk melakukan hal berikut:

  • Mengurangi churn memori. Profil heap menyediakan sampel dengan lokasi kode untuk alokasi memori. Hal ini membantu Anda mengidentifikasi area yang membuat banyak objek sementara, yang dapat berkontribusi pada Pengumpulan Sampah (GC) yang sering di aplikasi Anda.
  • Mengungkap kebocoran memori. Profil heap dapat digunakan dengan profil memori lainnya untuk mendiagnosis dan memperbaiki kebocoran memori. Hal ini membantu Anda menentukan lokasi yang mengalokasikan memori jauh lebih banyak dari yang diharapkan.

Menggabungkan profil

Sering kali, Anda akan menganalisis performa menggunakan satu profil. Namun, mengumpulkan beberapa profil atau satu profil gabungan sering kali dapat memberikan gambaran yang lebih lengkap dan membantu mendiagnosis masalah kompleks yang tidak dapat dilakukan oleh satu profil saja.

Pertimbangkan skenario berikut yang menunjukkan manfaat penggabungan profil:

  • Skenario 1: Menyelidiki kode yang tidak diinstrumentasi. Rekaman aktivitas sistem mungkin menunjukkan latensi untuk operasi yang telah Anda instrumentasikan. Namun, Anda mungkin memerlukan informasi lebih lanjut tentang bagian kode yang tidak diinstrumentasi yang berjalan selama waktu tersebut. Untuk menyelidiki, ambil profil stack panggilan untuk memahami kode yang dieksekusi. Informasi ini kemudian dapat membantu Anda meningkatkan pelacakan dengan menambahkan lebih banyak slice rekaman aktivitas.

  • Skenario 2: Menganalisis kebocoran memori dan pengumpulan sampah. Bayangkan rekaman aktivitas sistem menunjukkan peningkatan konstan dalam memori heap Java karena alokasi, yang memicu pembersihan sampah memori (GC) yang sering. Untuk memahami objek yang dialokasikan, ambil profil heap atau dump heap. Pendekatan gabungan ini membantu Anda mengidentifikasi cara mengurangi penggunaan memori. Misalnya, mengurangi alokasi yang tidak perlu atau dapat dioptimalkan menggunakan caching dapat mencegah terjadinya GC.