Endet ein Tick wegen eines Bugs nicht, bleibt der Server stehen, und der Watchdog startet ihn zwangsweise neu.
Warum Schleife endet wegen einer falschen Bedingung nicht, oder eine Rekursion gerät außer Kontrolle → Folge Tick endet nicht, Server steht still → Auf dem Bildschirm Freeze, danach Verbindungsabbruch für alle
Obergrenzen für Schleifendurchläufe, Watchdog, Tests, die die problematische Eingabe nachstellen.
Im Graphen
Verbindungen brechen gleichzeitig ab · Verbindungen, CPU pro Thread
Wo nachsehen
Während des Stillstands mit pidstat -t 1 die CPU pro Thread prüfen und mit perf top -t (Thread-ID) oder gdb feststellen, in welcher Funktion der Thread mit 100 % kreist. Nach einem bereits erfolgten Neustart die Einträge zu Watchdog-Timeouts prüfen (WatchdogSec in systemd, fehlgeschlagene Liveness-Probes in Kubernetes)
Spricht dafür
Während der Server still steht, klebt ein Game-Thread bei 100 % CPU, und der Stack kreist immer in derselben Funktion oder Schleife
Spricht dagegen
CPU während des Stillstands nahe 0: eher Deadlock oder Warten auf externe Antworten
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Quellen
systemd.service(5) — Linux manual pagesystemd WatchdogSec=: Sendet der Dienst nicht innerhalb der festgelegten Zeit ein Lebenszeichen (WATCHDOG=1), gilt er als fehlgeschlagen und wird beendet, je nach Einstellung von Restart= automatisch neu gestartet
Liveness, Readiness, and Startup ProbesKubernetes Ein Zustand, in dem die Anwendung läuft, aber nicht vorankommt, wird per Liveness-Probe erkannt und neu gestartet, standardmäßig wird alle 10 s geprüft und nach 3 aufeinanderfolgenden Fehlschlägen neu gestartet
pidstat(1) — Linux manual pagesysstat -t zeigt zusätzlich Statistiken pro Thread des Prozesses an (CPU-Auslastung u. a.)
perf-top(1) — Linux manual pageperf Zeigt den CPU-Anteil eines laufenden Threads (-t) oder Prozesses (-p) pro Funktion (Symbol) in Echtzeit