Arbeitsspeicher ist eine kritische und begrenzte Ressource auf Android-Geräten. Als Android-Plattformentwickler oder OEM ist es unerlässlich, die Funktionsweise des Arbeitsspeichers auf allen Ebenen zu verstehen – von der Java-Laufzeit bis zum Linux-Kernel. Nur so lässt sich ein leistungsstarkes und stabiles System entwickeln.
In diesem Leitfaden finden Sie einen umfassenden Überblick über die Android-Arbeitsspeicherarchitektur, die verfügbaren Analysetools und praktische Übungen, mit denen Sie arbeitsspeicherbezogene Probleme identifizieren und beheben können.
Ziele
Nach Abschluss dieses Leitfadens können Sie Folgendes:
- Die grundlegenden Konzepte des Android-Arbeitsspeichers erläutern, einschließlich des Zygote-Prozessmodells und speicherabgebildeter Dateien.
- Zwischen Resident Set Size (RSS), Proportional Set Size (PSS) und Unique Set Size (USS) unterscheiden.
- Standard-Befehlszeilentools wie
dumpsys meminfoundshowmapverwenden, um die Arbeitsspeichernutzung schnell zu bewerten. - Java-Heap-Dumps mit AHAT erfassen und analysieren, um Speicherlecks und übermäßige Zuweisungen zu finden.
- Perfetto und
heapprofdverwenden, um sowohl den Java- als auch den nativen Arbeitsspeicher im gesamten System zu analysieren. - Systemweite Indikatoren für Arbeitsspeicherbelastung wie Pressure Stall Information (PSI) verstehen und die Aktivität des Low Memory Killer (LMK) überwachen.
- Aktivitäten zur Arbeitsspeicherrückforderung auf Kernelebene beobachten, einschließlich ZRAM-Swap und Page-Cache-Entfernung.
Inhaltsverzeichnis
Dieser Leitfaden ist in die folgenden Abschnitte unterteilt, die in der angegebenen Reihenfolge gelesen werden sollten:
- Grundlegende Konzepte: Die wichtigsten technischen Prinzipien des Android-Arbeitsspeichers.
- Tools für die schnelle Bewertung:
meminfo,showmap, undprocstatsfür die schnelle Triage verwenden. - Java-Arbeitsspeicher analysieren: Detaillierte Analysen des Java-Heaps mit AHAT.
- Bitmaps und Arbeitsspeicher: Auswirkungen von Bildern auf den Arbeitsspeicher verstehen und Tools zur Analyse verwenden.
- Nativen Arbeitsspeicher analysieren: C/C++-Arbeitsspeicher mit
Perfetto und
heapprofdanalysieren. - WebView und Arbeitsspeicher: Architektur mit mehreren Prozessen und Speicherbedarf von WebViews verstehen.
- App-Code ist Arbeitsspeicher: Auswirkungen des Klassenladens und der DEX-Überlastung auf den Arbeitsspeicher verstehen.
- Threads und Arbeitsspeicher: Kosten von nativen Thread Stacks analysieren.
- Arbeitsspeicherlokalität und Leistung: Auswirkungen von Datenzugriffsmustern auf die CPU-Leistung verstehen.
- Dienstbindungen und Prozessstatus: Auswirkungen von prozessübergreifenden Abhängigkeiten auf OOM-Scores verstehen.
- Systemweite Fehlerbehebung: PSI, LMK, ZRAM-Swap und Page-Cache-Entfernung überwachen.
- Arbeitsspeicherrückforderung: Entfernung und Swap: memcg,
Gebühren und proaktive Rückforderung mit
memory.reclaimverstehen. - Interaktion zwischen kswapd und lmkd: Funktionsweise von kswapd und lmkd unter Belastung verstehen.
Voraussetzungen und Umgebung
In diesem Leitfaden werden Referenz-Workflows, Benchmark-Daten und Fallstudien vorgestellt, die zeigen, wie Sie Android-Arbeitsspeicherprobleme diagnostizieren und beheben können.
- Analysetools: Bei den Techniken in diesem Leitfaden werden hauptsächlich Standard-
Android-Leistungstools verwendet, darunter
Perfetto,
dumpsys meminfo,showmap, und AHAT. - Root-Berechtigungen: Für einige Diagnose-Workflows auf Systemebene (z. B.
Überprüfen der Arbeitsspeicherbelastung des Kernels oder der PMU-Zähler der Hardware) sind
erhöhte Root-Berechtigungen (
adb root) für einen Userdebug-Geräte- oder Emulator- Build erforderlich.
Wichtig: Grundlegende Konzepte