Daemon low memory killer (LMK) Android memantau status memori sistem Android yang sedang berjalan dan bereaksi terhadap tekanan memori yang tinggi dengan menghentikan proses yang paling tidak penting. Android vitals melacak dan melaporkan penghentian LMK yang dirasakan pengguna di Konsol Google Play untuk membantu Anda mengidentifikasi masalah tekanan memori yang memengaruhi pengguna.
Metrik LMK di Android vitals
Android vitals dapat membantu Anda memantau dan meningkatkan rasio LMK aplikasi. Android vitals hanya mengukur satu rasio LMK: Rasio LMK yang dirasakan pengguna.
Metrik ini mencerminkan persentase pengguna aktif harian yang mengalami setidaknya satu LMK yang dirasakan pengguna. LMK yang dirasakan pengguna adalah LMK yang kemungkinan telah diketahui oleh pengguna. Misalnya, hal ini mencakup LMK yang terjadi saat aplikasi Anda menampilkan aktivitas atau berjalan sebagai layanan latar depan. Penghentian ini mengakibatkan penghentian proses yang langsung dan tidak halus. Bagi pengguna akhir, aplikasi akan terlihat seperti error, sering kali mengabaikan mekanisme penyimpanan status siklus proses standar dan menyebabkan hilangnya progres pengguna.
Android vitals berfokus pada penghentian proses ini karena berfungsi sebagai proxy fidelitas tinggi untuk masalah kesalahan pengelolaan memori. Tingkat LMK di atas 1% menunjukkan kebutuhan mendesak untuk segera mengambil tindakan. Namun, rasio LMK yang lebih rendah tidak selalu berarti penggunaan memori aplikasi dalam kondisi baik. Rasio yang lebih rendah tersebut mungkin berarti daemon LMK sering menghentikan proses saat berada di latar belakang, sehingga menurunkan performa "warm start" dan kelancaran multitasking.
Anda dapat menemukan metrik ini di bagian Stabilitas di Android vitals:
Seperti metrik vital inti serupa, seperti ANR dan error, Anda dapat memfilter metrik, membandingkan metrik dengan pembanding, atau memantau perubahan metrik untuk jangka waktu yang lama (hingga 3 tahun). Data tersedia untuk aplikasi yang ada mulai 28 Jan 2025.
Cara kerja daemon low memory killer
Platform Android berjalan pada premis bahwa memori bebas adalah memori yang sia-sia. Android mencoba menggunakan semua memori yang tersedia sepanjang waktu. Misalnya, sistem menyimpan aplikasi yang ditutup di memori sehingga pengguna dapat membukanya kembali dengan cepat. Karena alasan ini, perangkat Android sering berjalan dengan memori bebas yang sangat sedikit (lihat Alokasi memori di antara proses).
Untuk menentukan proses yang akan dihentikan saat memori bebas hampir habis,
daemon low memory killer (LMK) menggunakan skor kehabisan memori yang disebut
oom_adj_score untuk
memprioritaskan proses yang berjalan. Proses dengan skor tinggi akan dihentikan terlebih dahulu. Aplikasi latar belakang dihentikan terlebih dahulu; proses sistem,
paling akhir. Tabel berikut mencantumkan kategori skor LMK dari tinggi ke rendah.
Item dalam kategori skor tertinggi, di baris pertama, akan dihentikan terlebih dahulu:
Alat pembuatan profil memori
Alat berikut dapat membantu Anda menemukan dan mendiagnosis masalah memori melalui cara berikut:
- Lihat bagaimana aplikasi Anda mengalokasikan memori dari waktu ke waktu. Anda dapat menemukan grafik real-time yang menunjukkan banyaknya memori yang digunakan aplikasi Anda, jumlah objek Java yang dialokasikan, dan kapan pembersihan sampah memori dilakukan.
- Mulai peristiwa pembersihan sampah memori dan ambil cuplikan dari heap Java selagi aplikasi berjalan.
- Rekam alokasi memori aplikasi Anda, periksa semua objek yang dialokasikan, dan lihat stack trace untuk setiap alokasi.
Jika game Anda berjalan di mesin native, gunakan HWAddress Sanitizer untuk men-debug alokasi memori native.
Memory Profiler Android Studio
Android Studio menyediakan Memory Profiler sebagai komponen Android Profiler yang membantu Anda mengidentifikasi kebocoran memori dan churn memori yang dapat menyebabkan aplikasi tersendat, berhenti merespons, dan bahkan tidak bekerja. Profiler menampilkan grafik real-time tentang penggunaan memori aplikasi dan memungkinkan Anda merekam heap dump, memaksa pembersihan sampah memori, dan melacak alokasi memori.
Alat pembuatan profil memori Unity
Jika menggunakan Unity Engine untuk mem-build aplikasi, Anda dapat mengikuti panduan pembuatan profil memori Unity. Unity menawarkan dua alat untuk menganalisis penggunaan memori dalam aplikasi Anda di Unity.
Yang pertama adalah modul Memory Profiler, yang merupakan profiler bawaan yang memberi Anda informasi dasar tentang tempat aplikasi Anda menggunakan memori.
Alat kedua adalah paket Memory Profiler, yang merupakan paket Unity yang dapat Anda tambahkan ke project. Paket ini menambahkan jendela Memory Profiler tambahan ke Unity Editor. Memory Profiler memungkinkan Anda menganalisis penggunaan memori di aplikasi Anda secara lebih mendetail. Anda dapat menyimpan dan membandingkan snapshot untuk menemukan kebocoran memori atau melihat tata letak memori untuk menemukan masalah fragmentasi memori.
Untuk alur kerja Unity khusus Android, lihat Memeriksa penggunaan memori dengan alat Unity, Mengoptimalkan penggunaan memori di Unity, dan Men-debug LMK untuk game Unity.
Unreal Memory Insights
Aplikasi yang dibuat oleh Unreal Engine dapat menggunakan Unreal Memory Insights untuk melihat informasi mendetail tentang alokasi dan dealokasi memori, termasuk tag Low Level Memory (LLM) dan stack panggilan yang terkait dengan blok memori.
Sistem kueri Memory Insights dapat menemukan alokasi aktif kapan saja, mengidentifikasi perubahan dalam penggunaan memori, menemukan kebocoran memori, dan membedakan alokasi jangka pendek dari alokasi jangka panjang.
Mulai UE 5.4, Memory Insights mendukung pelacakan memori dengan stack panggilan untuk project Android.
Untuk alur kerja Unreal khusus Android, lihat Memeriksa penggunaan memori dengan Unreal dan Mengoptimalkan penggunaan memori di Unreal.
Insight memori rendah
Android menyediakan callback dan API yang memungkinkan Anda mengurangi penggunaan memori game dan menentukan alasan penghentian game yang dijalankan sebelumnya.
Callback
Jangan mendaftar untuk callback trim yang tidak digunakan lagi. Android tidak
menyediakan API untuk mendeteksi peristiwa tekanan memori native sebelum sistem
mengklaim kembali memori, dan callback pemangkasan memori yang berjalan secara mendetail
(TRIM_MEMORY_RUNNING_*) belum efektif dalam mencegah penghentian akibat memori rendah.
Akibatnya, Android menghentikan penggunaan semua level pemangkasan selain
TRIM_MEMORY_UI_HIDDEN dan
TRIM_MEMORY_BACKGROUND. Gunakan callback yang tersisa ini—atau
yang setara dengan siklus proses mesin seperti OnApplicationPause Unity dan
ApplicationWillEnterBackgroundDelegate Unreal—untuk merilis UI dan resource
tambahan saat game Anda berpindah ke latar belakang. Untuk mengetahui detail implementasi,
lihat Mengurangi memori dalam game.
Penghentian game
Android mencoba menggunakan semua memori yang tersedia untuk meng-cache aplikasi dan game guna memastikan aplikasi dan game tersebut dimuat dengan cepat (meningkatkan pengalaman pengguna), tetapi saat memori menjadi terbatas, sistem akan menghentikan aplikasi dan game yang paling banyak menggunakan memori untuk mengosongkan memori agar perangkat dapat beroperasi secara normal.
Informasi, insight, dan praktik terbaik untuk membantu Anda mencapai penggunaan memori game yang lebih baik mencakup hal berikut:
- Gunakan
ApplicationExitInfo: API ini menampilkan alasan game yang dijalankan sebelumnya dihentikan oleh sistem Android. GunakanApplicationExitInfountuk memeriksa memori rendah (REASON_LOW_MEMORY) atau penghentian pembatas memori (REASON_MEMORY_LIMITER) sebagai alasan penghentian proses sebelumnya (lihat ApplicationExitInfo untuk game). Periksa apakah game dihentikan karena tekanan memori sehingga game dapat dioptimalkan untuk menggunakan lebih sedikit memori di perangkat tersebut. - Lihat total RAM fisik: Untuk mencegah game dihentikan
saat berada di latar depan dan untuk menyesuaikan kemampuan perangkat, lihat
total RAM fisik per perangkat untuk perincian yang lebih mendetail guna menyesuaikan penggunaan memori
game berdasarkan hal tersebut. Jika tujuannya adalah untuk mencegah aplikasi dihentikan segera
setelah dipindahkan ke latar belakang (agar pemain dapat melakukan multitasking), gunakan
callback trim (khususnya
TRIM_MEMORY_UI_HIDDEN) untuk mengurangi penggunaan memori game Anda.
Referensi lainnya
- Tentang manajemen memori untuk game
- Cara memantau penggunaan memori dalam game
- Cara mengurangi memori dalam game
- Ringkasan pengelolaan memori