Guia do Lag em Jogos › Buscar por sintoma
Câmera lenta: 24 causas e quem resolve
Também chamado de: mundo lento, tudo arrastado
Abrir no catálogo de sintomas ilustrado →
Tudo se move devagar. O cast das skills e o movimento dos monstros parecem esticados. Dependendo do design do servidor, a velocidade continua a mesma e o problema aparece como engasgos ou teleporte.
Todos na mesma área ficam lentos ao mesmo tempo. Costuma acontecer onde há muita gente reunida.
O servidor não consegue terminar os ticks no tempo. A conexão está boa, então o ping medido fora do jogo não muda; o ping exibido no jogo pode subir um pouco se incluir a espera pelo processamento no servidor. Verifique pico de jogadores, cálculo de visibilidade, broadcast e falta de memória.
Causas deste sintoma
L1 Processo do jogo no cliente
- Espiral de recuperação do timestep fixo: Depois de uma parada, o jogo tenta fazer de uma vez os cálculos atrasados e, por causa desse cálculo, atrasa de novo. (Desenvolvimento do cliente (Equipe de desenvolvimento))
L5 Equipamentos de rede do data center
L7 SO do servidor (kernel)
- Excesso de threads e troca de contexto: Com muito mais threads do que núcleos, o SO gasta CPU só para revezar as threads na execução. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Throttling de CPU em contêiner (cota do CFS): Quando o contêiner tem limite de CPU e gasta toda a cota dentro do período definido (em geral 100 ms), ele fica parado à força pelo resto do período (throttling). (Infraestrutura de servidores (Equipe de infraestrutura))
- Picos de latência pelo gerenciamento de energia do servidor (C-states e ajuste de frequência): Núcleos de CPU ociosos entram em estados profundos de economia de energia (C-states) e baixam a frequência para economizar eletricidade. Quando chega um pacote ou dispara um timer, o núcleo leva tempo para despertar e subir a frequência, e isso soma latência ao processamento de pacotes pequenos. (Infraestrutura de servidores (Equipe de infraestrutura))
- Tarefas agendadas: Compressão de logs, backups e varreduras de segurança que rodam todo dia no mesmo horário ocupam CPU e disco. (Infraestrutura de servidores (Equipe de infraestrutura))
- Mudança de desempenho após atualização de SO, kernel, driver ou firmware: É quando o código do jogo continua o mesmo, mas o servidor fica lento depois de uma atualização de SO, kernel, driver ou firmware. A atualização pode mudar valores padrão, o escalonador, as mitigações de vulnerabilidades da CPU (mitigations) e o comportamento de drivers. (Infraestrutura de servidores (Equipe de infraestrutura))
L8 Sockets e protocolos
- Envio bloqueante por causa de cliente lento: Quando o buffer de envio de um jogador com conexão lenta enche e o servidor envia no modo bloqueante (em que a chamada só retorna quando abre espaço no buffer), a thread do servidor fica esperando esse único jogador. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Arquitetura de I/O bloqueante: Numa arquitetura em que a thread não pode fazer mais nada enquanto espera um socket, tudo fica mais lento à medida que entram mais jogadores. (Desenvolvimento do servidor (Equipe de desenvolvimento))
L9 Processo do jogo no servidor
- Estouro do tick: Quando o trabalho de um tick passa do orçamento, o intervalo entre ticks do servidor se alonga, e a área inteira fica lenta ou com engasgos. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Explosão N² no cálculo de visibilidade (AOI): Se o servidor compara todos com todos para saber quem pode ver quem, quando o número de jogadores aumenta 10 vezes, o cálculo aumenta 100 vezes. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Sobrecarga de zona em thread única (hotspot): Numa arquitetura em que cada área fica com uma thread, quando todo mundo se junta num lugar, só aquele núcleo vai a 100%. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Tempestade de pathfinding: Quando centenas de monstros perseguem jogadores ao mesmo tempo calculando rotas, o consumo de CPU é grande. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Combate concentrado em um só alvo (world boss): Quando centenas de jogadores atacam o mesmo boss ao mesmo tempo, o cálculo daquele boss se concentra num só ponto, e as informações de cada golpe vão para todos que estão vendo. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Acúmulo de entidades (itens e invocações não removidos): Quando itens no chão, invocações e timers encerrados que deveriam sumir não são limpos e se acumulam, quanto mais tempo o servidor fica ligado, mais trabalho cada tick tem. (Desenvolvimento do servidor (Equipe de desenvolvimento))
L10 Memória
- Vazamento de memória: Memória que não é liberada vai se acumulando aos poucos e, depois de alguns dias, faz o GC rodar sem parar, causa swap ou leva a um encerramento forçado. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- GC thrashing (pouca folga no heap): Quando os dados vivos chegam perto do limite do heap, o GC roda, mas quase não tem o que recuperar, e passa a se repetir sem parar. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Swap: Quando falta memória e o SO manda parte dela para o disco, cada uso dessa memória passa a esperar pelo disco, que é mais de 1.000 vezes mais lento. (Infraestrutura de servidores (Equipe de infraestrutura))
- Cache miss: Quando os dados estão espalhados pela memória, a CPU precisa ir até a RAM, que é lenta, e esperar a cada acesso. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Fragmentação de memória: Quando alocações e liberações repetidas quebram o espaço livre em pedaços pequenos, o processo passa a ocupar muito mais memória do que realmente usa. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Acesso a memória NUMA remota: Em servidores com duas CPUs, usar a memória ligada à outra CPU deixa o acesso mais lento. (Infraestrutura de servidores (Equipe de infraestrutura))
L11 Disco
- Esgotamento dos créditos de burst do disco na nuvem: Alguns discos na nuvem e instâncias pequenas têm créditos de burst, que permitem passar do desempenho base por um tempo; quando o período de uso intenso se prolonga e os créditos acabam, a velocidade cai de repente. (Infraestrutura de servidores (Equipe de infraestrutura))
L13 Arquitetura e operação de servidores
- Demora do autoscaling: Quando o número de jogadores dispara, novos servidores sobem automaticamente, mas a preparação leva alguns minutos, e nesse meio-tempo os servidores existentes ficam sobrecarregados. (Infraestrutura de servidores (Equipe de infraestrutura))
- Excesso de macros e bots: Bots mandam requisições com muito mais frequência que pessoas e consomem a capacidade de processamento do servidor. (Desenvolvimento do servidor (Equipe de desenvolvimento))
Ver o catálogo de sintomas ilustrado