Android-Speicher verstehen und Fehler beheben

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 meminfo und showmap verwenden, um die Arbeitsspeichernutzung schnell zu bewerten.
  • Java-Heap-Dumps mit AHAT erfassen und analysieren, um Speicherlecks und übermäßige Zuweisungen zu finden.
  • Perfetto und heapprofd verwenden, 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:

  1. Grundlegende Konzepte: Die wichtigsten technischen Prinzipien des Android-Arbeitsspeichers.
  2. Tools für die schnelle Bewertung: meminfo, showmap, und procstats für die schnelle Triage verwenden.
  3. Java-Arbeitsspeicher analysieren: Detaillierte Analysen des Java-Heaps mit AHAT.
  4. Bitmaps und Arbeitsspeicher: Auswirkungen von Bildern auf den Arbeitsspeicher verstehen und Tools zur Analyse verwenden.
  5. Nativen Arbeitsspeicher analysieren: C/C++-Arbeitsspeicher mit Perfetto und heapprofd analysieren.
  6. WebView und Arbeitsspeicher: Architektur mit mehreren Prozessen und Speicherbedarf von WebViews verstehen.
  7. App-Code ist Arbeitsspeicher: Auswirkungen des Klassenladens und der DEX-Überlastung auf den Arbeitsspeicher verstehen.
  8. Threads und Arbeitsspeicher: Kosten von nativen Thread Stacks analysieren.
  9. Arbeitsspeicherlokalität und Leistung: Auswirkungen von Datenzugriffsmustern auf die CPU-Leistung verstehen.
  10. Dienstbindungen und Prozessstatus: Auswirkungen von prozessübergreifenden Abhängigkeiten auf OOM-Scores verstehen.
  11. Systemweite Fehlerbehebung: PSI, LMK, ZRAM-Swap und Page-Cache-Entfernung überwachen.
  12. Arbeitsspeicherrückforderung: Entfernung und Swap: memcg, Gebühren und proaktive Rückforderung mit memory.reclaim verstehen.
  13. 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