한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game-Lag-Whitepaper › L1 Spielprozess auf dem Client

Speicherleck im Client Client memory leak

Ursachen-ID cg-leak · Hauptzuständig Client-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Je länger das Spiel läuft, desto mehr Speicher belegt es. Es wird zunehmend langsamer und am Ende zwangsweise beendet.

Warum Texturen, UI und Effekte werden beim Gebietswechsel nicht freigegeben → Folge GC läuft häufiger, dem OS geht der Arbeitsspeicher aus, es lagert in den Swap aus → Auf dem Bildschirm Nach einigen Stunden Spielzeit zunehmendes Ruckeln, dann erzwungenes Beenden (für den Spieler wie ein Verbindungsabbruch)

Symptome
Ruckeln, Verbindungsabbruch
Faktoren
Stillstand
Wer ist betroffen
Nur ich
Wann
Je länger es läuft
Zuständigkeit
Hauptzuständig Client-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Speicherverbrauch bei Gebietswechseln messen, nicht freigegebene Texturen, UI-Elemente und Effekte finden und beheben, automatisierte Langzeittests (Soak-Tests).
Im Graphen
Langsamer Anstieg · Speicherverbrauch des Spielprozesses
Wo nachsehen
In der Leistungsüberwachung Process(Spiel)\Private Bytes über mehrere Stunden aufzeichnen. Auf Mobilgeräten den Beendigungsgrund in ApplicationExitInfo unter Android (REASON_LOW_MEMORY) und Jetsam-Berichte unter iOS
Spricht dafür
Bei jedem Gebietswechsel steigt der Speicherverbrauch und sinkt nicht wieder, mit längerer Laufzeit nehmen Ruckeln und erzwungenes Beenden zu
Spricht dagegen
Speicherverbrauch konstant, mit längerer Laufzeit aber Zittern: „Präzisionsverlust bei float-Zeitwerten“
Prüfmittel
Prüfung in der Umgebung des Spielers
Mehr dazu
Smartphones halten meist durch, indem sie Speicher komprimieren. Reicht der Speicher trotzdem nicht, beendet das OS das Spiel sofort, und es „fliegt raus“. Geräte mit wenig RAM trifft es zuerst.

Quellen

  1. Memory allocation among processes Android (Google)
    Android hält durch, indem es Speicher in zRAM komprimiert. Reicht das nicht, beendet der Low Memory Killer Prozesse. Wird die App im Vordergrund beendet, wirkt das wie ein Absturz
  2. Identifying high-memory use with jetsam event reports Apple
    iOS beendet Apps zwangsweise (Jetsam), wenn der Speicherdruck anhält. Überschreitet eine App ihr Speicherlimit, kommt sie für die Beendigung in Frage
  3. Find user-mode memory leaks with Performance Monitor (PerfMon) Microsoft
    Process > Private Bytes (vom Prozess belegter privater Speicher) und Virtual Bytes über lange Zeit aufzeichnen. Steigen sie nur an, liegt ein Leck vor
  4. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY: Der Low Memory Killer des Systems hat den App-Prozess beendet (Geräte ohne Unterstützung melden REASON_SIGNALED bzw. SIGKILL)

Verwandte Ursachen

Gleiche Schicht: L1 Spielprozess auf dem Client

Ursachen aus anderen Schichten mit demselben Symptom (Ruckeln)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen