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

Game-Lag-Whitepaper › L10 Arbeitsspeicher

GC-Pause der Skript-Engine Scripting VM GC (Lua, etc.)

Ursachen-ID mem-script-gc · Hauptzuständig Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Laufen Quests, KI und Skills in einer Skriptsprache wie Lua, steht selbst auf einem C++-Server die Zone still, solange die GC der Skript-Engine läuft.

Warum Skript-Engine jeder Zone erzeugt beim Ausführen von Quests, KI und Events massenhaft temporäre Objekte → Folge Sammelt die GC der Skript-Engine viel auf einmal, bleibt der Tick dieser Zone stehen → Auf dem Bildschirm Kurzes Stocken in festen Abständen, nur in bestimmten Zonen oder während bestimmter Events

Symptome
Ruckeln, Freeze
Faktoren
Stillstand
Wer ist betroffen
Bestimmter Ort oder Kanal
Wann
Bei großem Andrang, In festen Abständen
Zuständigkeit
Hauptzuständig Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Inkrementelle oder generationelle GC einstellen, GC in jedem Tick ein Stück weiterlaufen lassen, temporäre Objekte in Skripten reduzieren.
Größenordnungen
Wächst der Skript-Heap auf mehrere hundert MB, kann eine Sammlung in einem Durchgang (bei abgeschalteter inkrementeller Sammlung oder als vollständige Sammlung im generationellen Modus) einige Dutzend bis mehrere hundert ms dauern.
Im Graphen
Spitzen in festen Abständen · Tick-Zeit pro Zone, Speicher der Skript-Engine
Wo nachsehen
Tick-Zeit pro Zone und Speicherverbrauch der Skript-Engine dieser Zone (in Lua collectgarbage("count")) in jedem Tick aufzeichnen und in einem Graphen übereinanderlegen
Spricht dafür
Momente, in denen der Skript-Speicher abrupt fällt (Sammlung in einem Durchgang), fallen mit Tick-Spitzen dieser Zone zusammen, andere Zonen sind unauffällig
Spricht dagegen
Spitzen ohne Änderung im Skript-Speicher: Last oder Locks in dieser Zone. Alle Zonen des Servers schlagen gleichzeitig aus: GC des Servers (mem-gc) oder Swap (mem-swap)
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig

Quellen

  1. Lua 5.4 Reference Manual Lua.org
    Der inkrementelle Modus teilt die Sammlung in kleine Schritte zwischen der Programmausführung auf (große Schritte bedeuten Stop-the-World), eine Major-Sammlung im generationellen Modus ist ein Stop-the-World-Durchlauf über alle Objekte, collectgarbage("count") liefert den gesamten von Lua belegten Speicher (KB)

Verwandte Ursachen

Gleiche Schicht: L10 Arbeitsspeicher

Ursachen aus anderen Schichten mit demselben Symptom (Ruckeln)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen