Memahami dan memecahkan masalah memori Android

Memori adalah resource penting dan terbatas di perangkat yang didukung Android. Sebagai developer platform Android atau OEM, memahami cara kerja memori di setiap level—mulai dari runtime Java hingga kernel Linux—sangat penting untuk membangun sistem yang berperforma dan stabil.

Panduan ini memberikan ringkasan komprehensif tentang arsitektur memori Android, alat yang tersedia untuk analisis, dan latihan praktik untuk membantu Anda mengidentifikasi dan mengatasi masalah terkait memori.

Tujuan

Setelah menyelesaikan panduan ini, Anda akan dapat:

  • Menjelaskan konsep dasar memori Android, termasuk model proses Zygote dan file yang dipetakan memori.
  • Membedakan antara Resident Set Size (RSS), Proportional Set Size (PSS), dan Unique Set Size (USS).
  • Menggunakan alat command line standar seperti dumpsys meminfo dan showmap untuk menilai penggunaan memori dengan cepat.
  • Mengambil dan menganalisis dump heap Java menggunakan AHAT untuk menemukan kebocoran dan alokasi berlebihan.
  • Menggunakan Perfetto dan heapprofd untuk membuat profil memori Java dan native di seluruh sistem.
  • Memahami indikator tekanan memori di seluruh sistem seperti Pressure Stall Information (PSI) dan memantau aktivitas Low Memory Killer (LMK).
  • Mengamati aktivitas klaim tingkat kernel, termasuk swap ZRAM dan penghapusan cache halaman.

Struktur panduan

Panduan ini disusun ke dalam bagian berikut, yang dirancang untuk dibaca secara berurutan:

  1. Konsep dasar: Prinsip teknis inti memori Android.
  2. Alat penilaian cepat: Menggunakan meminfo, showmap, dan procstats untuk triase cepat.
  3. Menganalisis memori Java: Mempelajari heap Java secara mendalam dengan AHAT.
  4. Bitmap dan memori: Memahami pengaruh gambar terhadap RAM dan menggunakan alat untuk membuat profilnya.
  5. Menganalisis memori native: Membuat profil memori C/C++ dengan Perfetto dan heapprofd.
  6. WebView dan memori: Memahami arsitektur multi-proses dan jejak memori WebView.
  7. Kode aplikasi adalah memori: Memahami pengaruh pemuatan class dan dex bloat terhadap RAM.
  8. Thread dan memori: Menganalisis biaya stack thread native.
  9. Lokalitas dan performa memori: Memahami pengaruh pola akses data terhadap performa CPU.
  10. Binding layanan dan status proses: Memahami pengaruh dependensi lintas proses terhadap skor OOM.
  11. **Pemecahan masalah di seluruh sistem**: Memantau PSI, LMK, swap ZRAM, dan penghapusan cache halaman.
  12. Klaim memori: penghapusan dan swap: Memahami memcg, biaya, dan klaim proaktif dengan memory.reclaim.
  13. Interaksi kswapd dan lmkd: Memahami cara kerja kswapd dan lmkd bersama-sama di bawah tekanan.

Prasyarat dan lingkungan

Panduan ini menyajikan alur kerja referensi, data tolok ukur, dan studi kasus yang menunjukkan cara mendiagnosis dan mengatasi masalah memori Android.

  • Alat analisis: Teknik dalam panduan ini terutama menggunakan alat performa Android standar, termasuk Perfetto, dumpsys meminfo, showmap, dan AHAT.
  • Hak akses root: Beberapa alur kerja diagnostik tingkat sistem (seperti memeriksa tekanan memori kernel atau penghitung PMU hardware) memerlukan hak akses root yang ditingkatkan (adb root) pada build perangkat atau emulator userdebug.

Mulai di sini: Konsep dasar