Die Arbeitsspeichernutzung (anonyme RSS + Auslagerung) ist ein Messwert in Android Vitals, der die Arbeitsspeichernutzung Ihrer App widerspiegelt.
Anonymer Arbeitsspeicher ist Arbeitsspeicher, der nicht durch eine Datei im Speicher gesichert ist, z. B. Heap-Zuweisungen und mit mmap zugewiesener Arbeitsspeicher. Hier werden die dynamischen Arbeitsspeicherzuweisungen Ihrer App erfasst, einschließlich des Java- oder Kotlin-Heaps, nicht verwalteter nativer Heap-Zuweisungen (wobei Bitmap-Pixeldaten unter Android 8.0 (API-Level 26) und höher gespeichert werden) und Thread-Ausführungsstacks. Das Betriebssystem kann dateigestützten Arbeitsspeicher bei Bedarf freigeben, anonymen Arbeitsspeicher jedoch nicht.
Resident Set Size (RSS) ist die Gesamtzahl der Arbeitsspeicherseiten (gemeinsam genutzt und nicht gemeinsam genutzt), die von einem Prozess verwendet werden und sich im physischen RAM befinden. Eine Seite gilt als „gemeinsam genutzt“, wenn sie von mehr als einem Prozess aufgerufen wird (z. B. von Apps, die auf dieselbe Bibliothek zugreifen).
Bei anonymem Arbeitsspeicher kann das System Seiten in den Auslagerungsspeicher (oder zRAM unter Android) schreiben, wenn der Arbeitsspeicher knapp wird. Bei Bedarf kann das System diese Seiten aus dem Auslagerungsspeicher wieder lesen.
Insgesamt ist die Arbeitsspeichernutzung (anonyme RSS + Auslagerung) ein Maß für die Gesamtzahl der Arbeitsspeicherseiten Ihrer App, die nicht durch eine Datei im Speicher gesichert sind, einschließlich des Arbeitsspeichers, der vom System im Auslagerungsspeicher gesichert wird. Wenn Sie die anonyme RSS + Auslagerung im Blick behalten, sehen Sie den tatsächlichen, nicht freigebbaren Speicherbedarf Ihrer App.
Wenn die Arbeitsspeichernutzung Ihrer App hoch ist, sollten Sie das Problem weiter untersuchen und mithilfe der Informationen auf dieser Seite beheben.
Hohe Arbeitsspeichernutzung ermitteln
Android Vitals
In Android Vitals wird die Arbeitsspeichernutzung Ihrer App nach den folgenden Prozessstatus aufgeschlüsselt:
- Vordergrund: Der Prozess der App ist sichtbar. Ein hoher P99-Wert wirkt sich hier oft auf die vom Nutzer wahrgenommene Leistung aus (Ruckeln oder OOM-Abstürze) und wird stark von nicht freigegebenen UI-Komponenten oder Aktivitäten beeinflusst.
- Dienst im Vordergrund: Die App führt einen Dienst im Vordergrund aus. Da diese Dienste für lang andauernde Aufgaben konzipiert sind, sind sie anfällig für kumulative Lebenszykluslecks, die den P99-Wert im Laufe der Zeit aggressiv in die Höhe treiben.
- Hintergrund: Die App führt einen Hintergrunddienst aus oder wurde kürzlich in den Hintergrund verschoben, aber noch nicht im Cache gespeichert. Hier summieren sich Lecks bei der Hintergrundverarbeitung.
- Im Cache: Die App befindet sich im Cache. Dieser Status ist sehr anfällig für Arbeitsspeichermangel im System, z. B. LMKs. Da das Betriebssystem diesen Prozessstatus jederzeit freigeben kann, wird er nur zu Debugging-Zwecken bereitgestellt.
Informationen dazu, wie diese Prozessstatus mit onTrimMemory zusammenhängen,
finden Sie unter Arbeitsspeicher als Reaktion auf Ereignisse freigeben.
In Android Vitals wird die Arbeitsspeichernutzung Ihrer App auch nach RAM-Buckets aufgeschlüsselt. Der Messwert für die Arbeitsspeichernutzung wird als Zeitachse mit täglichen Perzentilwerten angezeigt, zusammen mit dem letzten Tageswert für das 50. und 90. Perzentil.
Nachdem Sie Ihre Arbeitsspeicher-Baseline ermittelt haben, folgen Sie der Anleitung, um eine übermäßige Arbeitsspeichernutzung zu diagnostizieren und zu verbessern.
Arbeitsspeicherlecks anhand der Verteilung am Ende der Verteilung erkennen
Um Arbeitsspeicherlecks zu erkennen, suchen Sie in Android Vitals nach Abweichungen zwischen Ihren typischen Nutzern (P50) und den Nutzern am Ende der Verteilung (P90). Während eine allgemeine Zunahme der Asset-Größe den Arbeitsspeicher gleichmäßig über alle Perzentile hinweg erhöht, summieren sich Arbeitsspeicherlecks im Laufe der Zeit und verzerren die Daten am Ende der Verteilung stark.
Vergleichen Sie Ihre P90- und P99-Messwerte mit Ihrer P50-Baseline nach Prozessname. Wenn das Verhältnis von P90 zu P50 das 3,5-Fache übersteigt, deutet dies auf ein wahrscheinliches Arbeitsspeicherleck bei längeren Sitzungen hin. In bestimmten Anwendungsfällen deutet ein erhöhtes Verhältnis nicht immer auf ein Leck hin. Sie sollten jedoch den jeweiligen Workflow prüfen, um festzustellen, ob die erhöhte Arbeitsspeichernutzung ein erwartetes Verhalten ist.
Ressourcen
Übermäßige Arbeitsspeichernutzung lokal diagnostizieren
Um die Ursache für eine übermäßige Arbeitsspeichernutzung zu diagnostizieren, können Sie mit Heap-Dump aufzeichnen in den Entwickleroptionen, in Android Studio oder in Perfetto einen Heap-Dump erfassen. Wir empfehlen, zuerst einen Heap-Dump lokal zu erfassen, nachdem Sie die wichtigsten Nutzerpfade Ihrer App getestet haben.
Wir empfehlen insbesondere, die folgenden Nutzerpfade zu testen:
- Webviews und In-App-Browsersitzungen
- Medienlastiges unendliches Scrollen
- Workflows zum Erstellen und Bearbeiten von Assets
Um potenzielle Arbeitsspeicherlecks zu untersuchen, ermitteln Sie zuerst die Prozesse mit der höchsten Auslastung. Verwenden Sie dazu die Tabelle Prozessname im Dashboard zur Arbeitsspeichernutzung in Android Vitals. Führen Sie dann die entsprechenden User Journeys lokal aus und erfassen Sie Heap-Dumps in verschiedenen Prozessstatus (sichtbar, Dienst im Vordergrund und im Cache), um zu prüfen, ob die App Arbeitsspeicher freigibt, nachdem sie in den Hintergrund verschoben wurde.
Wenn Sie Arbeitsspeicherprobleme mit dem Android Studio Profiler debuggen, können Sie auch die LeakCanary-Integration verwenden, um die Leckerkennung zu optimieren, und die Erkennung doppelter Bitmaps, um die Bildnutzung zu optimieren.
Nachdem Sie den Heap-Dump erfasst haben, empfehlen wir, die Perfetto AI Skills zu verwenden, um den Heap-Dump zu analysieren und potenzielle Ursachen für eine hohe Arbeitsspeichernutzung zu ermitteln.
Hier ein Beispiel für eine Antwort der AI Skills:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
Weitere Ressourcen zum Interpretieren von Heap-Dumps
Die folgenden Ressourcen enthalten weitere Informationen zum Interpretieren von Heap-Dumps und zum Debuggen der Arbeitsspeichernutzung:
- Manuelle Analyse: In der Anleitung zum Perfetto Heap Dump Explorer erfahren Sie, wie Sie in der Perfetto-UI navigieren und Heap-Dump-Visualisierungen interpretieren.
- Java-/Kotlin-Zuweisungen:Unter Ersten ART-Heap-Dump visualisieren finden Sie eine Schritt-für-Schritt-Anleitung zum Analysieren von Heap-Dumps der Android Runtime (ART).
- Native Zuweisungen: In der Dokumentation zu Perfetto Native Profiling erfahren Sie, wie Sie native (C/C++) Arbeitsspeicherprofile erfassen und analysieren.
- CLI-Prüfung: Mit dem Befehl „adb dumpsys meminfo“ erhalten Sie eine schnelle Aufschlüsselung der Arbeitsspeichernutzung Ihrer App auf einem Gerät.
- KI-gestützte Analyse: Nutzen Sie die Perfetto AI Skills, um LLM-gestützte Analysen auszuführen, mit denen Sie Arbeitsspeicherlecks und übermäßige Zuweisungen in Ihren Traces erkennen können.
- SQL-basierte Analyse: Mit den Perfetto SQL and Trace Analysis Skills können Sie strukturierte Abfragen und spezielle Skripts ausführen, um komplexe Trace-Daten zu analysieren.
Arbeitsspeichernutzung verbessern
In diesen Abschnitten erfahren Sie mehr darüber, wie Sie die Arbeitsspeichernutzung Ihrer App verbessern können:
- Code- und Ressourcenbedarf Ihrer App reduzieren
- Verfügbaren Arbeitsspeicher und Arbeitsspeichernutzung im Blick behalten
- Arbeitsspeichereffizientere Codekonstrukte verwenden
Eine detaillierte Anleitung zum Beheben von Arbeitsspeicherproblemen finden Sie im Leitfaden Arbeitsspeicher Ihrer App verwalten.