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

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

Chamadas síncronas na thread do jogo Synchronous DB / file I/O on the game loop

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

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

Se o tick espera uma resposta do BD ou uma escrita em arquivo, todo o andamento do jogo no servidor para por esse tempo.

Por quê Dentro do tick, espera consultas e gravações no BD, escrita de log e chamadas a APIs externas → Efeito Se o BD leva 100 ms, o tick também fica parado 100 ms → Na tela Toda vez que o BD ou o disco fica lento, o mapa inteiro dá um engasgo

Sintomas
Travamento, Engasgos
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)
Passar todo trabalho lento (consultas e gravações no BD, escrita de log, chamadas a APIs externas) para execução assíncrona e aplicar o resultado no tick seguinte (só colocar timeout não basta: enquanto espera, o tick continua parado).
Números de referência
Mesmo uma ida e volta de 0,5 ms ao BD no mesmo data center, chamada 100 vezes num tick, soma 50 ms. Sozinha, consome o orçamento inteiro de 20 ticks.
No gráfico
Picos aleatórios · Tempo de tick do servidor, latência das queries do BD
Onde olhar
Gráfico de tempo de tick, latência das queries do BD (slow query log etc.) e latência do disco no mesmo eixo de tempo. Sem métrica de tick, onde a thread do jogo espera, com bcc offcputime -p
Confirma se
Os picos de tick coincidem com os picos de latência do BD ou de arquivos, e o tempo de espera da thread do jogo se concentra nas pilhas de recebimento de resposta do BD ou de escrita em arquivo
Descarta se
Latência do BD e do disco tranquila, mas o tick dá picos: pausa do GC ou contenção de lock
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo

Fontes

  1. Designs, Lessons and Advice from Building Large Distributed Systems Google
    Keynote do LADIS 2009 (Jeff Dean). Ida e volta dentro do mesmo data center de cerca de 0,5 ms (500.000 ns)
  2. ASP.NET Core Best Practices Microsoft
    Chamar de forma assíncrona acesso a dados, I/O e operações demoradas; chamadas síncronas bloqueantes levam ao esgotamento do pool de threads e a respostas lentas
  3. Demonstrations of offcputime, the Linux eBPF/bcc version IO Visor
    Soma, por pilha de chamadas, o tempo em que as threads ficaram paradas fora da CPU (off-CPU); -p especifica o processo

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