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

Guia do Lag em Jogos › L1 Processo do jogo no cliente

Vazamento de memória no cliente Client memory leak

ID da causa cg-leak · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)

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

Quanto mais tempo o jogo fica aberto, mais memória ele usa; vai ficando lento e, no fim, é fechado à força.

Por quê Texturas, UI e efeitos não são liberados nas trocas de mapa → Efeito O GC roda com mais frequência e, com pouca memória no SO, começa o swap → Na tela Depois de algumas horas de jogo, os engasgos vão aumentando até o encerramento forçado (para o jogador, parece uma desconexão)

Sintomas
Engasgos, Desconexão
Fatores
Paralisação
Quem é afetado
Só eu
Quando
Quanto mais tempo ligado
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Medir o uso de memória nas trocas de mapa, encontrar e corrigir texturas, UI e efeitos que não são liberados, fazer testes automatizados de longa duração (soak tests).
No gráfico
Subida lenta · Memória do processo do jogo
Onde olhar
Registrar Process(jogo)\Private Bytes no Monitor de Desempenho por algumas horas. No mobile, o motivo de encerramento no ApplicationExitInfo do Android (REASON_LOW_MEMORY) e os relatórios de jetsam do iOS
Confirma se
A memória sobe a cada troca de mapa e não volta a cair, e engasgos e encerramentos forçados aumentam quanto mais tempo o jogo fica aberto
Descarta se
Memória estável, e só o tremor piora quanto mais tempo o jogo fica aberto: “Perda de precisão do tempo em float”
Como verificar
Verificação no ambiente do jogador
Saiba mais
Celulares costumam aguentar comprimindo a memória. Se mesmo assim faltar memória, o SO fecha o jogo na hora (o jogador cai do jogo). Quanto menos RAM o aparelho tem, mais cedo isso acontece.

Fontes

  1. Memory allocation among processes Android (Google)
    O Android aguenta comprimindo a memória em zRAM e, quando ela acaba, o low memory killer encerra processos; quando o app em primeiro plano é encerrado, parece um crash
  2. Identifying high-memory use with jetsam event reports Apple
    Se a pressão de memória não diminui, o iOS encerra apps à força (jetsam), e o app que passa do seu limite de memória vira candidato a ser encerrado
  3. Find user-mode memory leaks with Performance Monitor (PerfMon) Microsoft
    Registrar por muito tempo Process > Private Bytes (memória privada alocada pelo processo) e Virtual Bytes; se só sobem, é vazamento
  4. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY: o low memory killer do sistema encerrou o processo do app (aparelhos sem suporte informam REASON_SIGNALED com SIGKILL)

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Engasgos) em outras camadas

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