Si por un bug un tick no termina nunca, el servidor se detiene y el watchdog lo reinicia a la fuerza.
Por qué Un bucle que no termina por una condición errónea, o una recursión desbocada → Efecto El tick no termina y el servidor se detiene → En pantalla Congelamiento y después desconexión de todos los jugadores
Al hacer ciertas acciones, De vez en cuando, al azar
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Poner un tope a las iteraciones, tener un watchdog, hacer pruebas que reproduzcan las entradas problemáticas.
En el gráfico
Desconexión masiva · Número de conexiones, CPU por hilo
Dónde mirar
CPU por hilo durante la detención con pidstat -t 1, y en qué función gira el hilo que está al 100% con perf top -t (ID del hilo) o gdb. Si ya se reinició, registros de timeout del watchdog (WatchdogSec de systemd, fallos de la sonda de liveness de Kubernetes)
Se confirma si
Mientras el servidor está detenido, un hilo del juego está pegado al 100% de CPU y su pila sigue girando dentro de la misma función o bucle
Se descarta si
Si la CPU está cerca de 0 durante la detención, apunta a un deadlock o a la espera de una respuesta externa
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
Fuentes
systemd.service(5) — Linux manual pagesystemd WatchdogSec=: si el servicio no envía la señal de que sigue vivo (WATCHDOG=1) en el tiempo fijado, se considera fallido y se termina; se reinicia automáticamente según el ajuste Restart=
Liveness, Readiness, and Startup ProbesKubernetes Detectar con una sonda de liveness un proceso que se ejecuta pero no avanza y reiniciarlo; por defecto, se comprueba cada 10 segundos y se reinicia tras 3 fallos seguidos
pidstat(1) — Linux manual pagesysstat -t muestra también las estadísticas por hilo del proceso (uso de CPU, entre otras)
perf-top(1) — Linux manual pageperf Muestra en tiempo real el peso de uso de CPU por función (símbolo) de un hilo (-t) o proceso (-p) en ejecución