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

Libro blanco del lag en juegos › L9 Proceso del juego en el servidor

Bucles infinitos y lógica desbocada Infinite loop / runaway logic

ID de la causa sp-infinite-loop · Responsable principal Desarrollo de servidor (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

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

Síntomas
Congelamiento, Desconexión
Factores
Detención
A quién afecta
Una zona o un canal, Todo el servidor
Cuándo
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

  1. systemd.service(5) — Linux manual page systemd
    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=
  2. Liveness, Readiness, and Startup Probes Kubernetes
    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
  3. pidstat(1) — Linux manual page sysstat
    -t muestra también las estadísticas por hilo del proceso (uso de CPU, entre otras)
  4. perf-top(1) — Linux manual page perf
    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

Ver también

Misma capa: L9 Proceso del juego en el servidor

Causas de otras capas con el mismo síntoma (Congelamiento)

Ver la ficha interactiva con gráficos y simulaciones