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

Guia do Lag em Jogos › L9 Processo do jogo no servidor

Loop infinito e lógica descontrolada Infinite loop / runaway logic

ID da causa sp-infinite-loop · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

Quando um bug impede um tick de terminar, o servidor para e o watchdog o reinicia à força.

Por quê Uma condição errada faz um loop nunca terminar, ou uma recursão sai do controle → Efeito O tick não termina e o servidor para → Na tela Travamento e depois desconexão de todos

Sintomas
Travamento, Desconexão
Fatores
Paralisação
Quem é afetado
Local ou canal específico, Servidor inteiro
Quando
Ao fazer ações específicas, Aleatoriamente, de vez em quando
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Limitar o número de iterações, ter um watchdog, testar reproduzindo a entrada problemática.
No gráfico
Queda de conexões em massa · Conexões, CPU por thread
Onde olhar
Durante a parada, ver a CPU por thread com pidstat -t 1 e conferir com perf top -t (ID da thread) ou com gdb em que função a thread a 100% está rodando. Se o processo já reiniciou, procurar registros de estouro do tempo do watchdog (WatchdogSec do systemd, falha da liveness probe do Kubernetes)
Confirma se
Enquanto o servidor está parado, uma thread do jogo fica colada em 100% de CPU, e a pilha continua girando dentro da mesma função ou do mesmo loop
Descarta se
CPU perto de 0 durante a parada: aponta para deadlock ou espera de resposta externa
Como verificar
Ferramentas de infra (sem precisar do código do jogo)

Fontes

  1. systemd.service(5) — Linux manual page systemd
    WatchdogSec=: se o serviço não envia o sinal de vida (WATCHDOG=1) dentro do tempo definido, é considerado em falha e encerrado, com reinício automático conforme a configuração Restart=
  2. Liveness, Readiness, and Startup Probes Kubernetes
    A liveness probe detecta um estado em que o processo roda, mas não avança, e reinicia; por padrão, verifica a cada 10 s e reinicia após 3 falhas seguidas
  3. pidstat(1) — Linux manual page sysstat
    -t mostra também as estatísticas por thread do processo (uso de CPU etc.)
  4. perf-top(1) — Linux manual page perf
    Mostra em tempo real a fatia de uso de CPU por função (símbolo) de uma thread (-t) ou processo (-p) em execução

Veja também

Mesma camada: L9 Processo do jogo no servidor

Mesmo sintoma (Travamento) em outras camadas

Ver o card interativo, com figuras e simulações