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

Libro blanco del lag en juegos › L1 Proceso del juego en el cliente

Fuga de memoria en el cliente Client memory leak

ID de la causa cg-leak · Responsable principal Desarrollo de cliente (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Cuanto más tiempo lleva encendido, más memoria usa: el juego va cada vez más lento y al final se cierra a la fuerza.

Por qué Al ir y venir entre zonas no se liberan texturas, elementos de UI ni efectos → Efecto El GC se ejecuta más a menudo, falta memoria en el SO y empieza el swap → En pantalla Tras unas horas de juego, los tirones aumentan poco a poco hasta un cierre forzado (que el jugador percibe como una desconexión)

Síntomas
Tirones, Desconexión
Factores
Detención
A quién afecta
Solo yo
Cuándo
Cuanto más tiempo lleva encendido
Responsable
Responsable principal Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Medir el uso de memoria en cada cambio de zona, localizar y corregir las texturas, la UI y los efectos que no se liberan, hacer pruebas automáticas de larga duración (soak tests).
En el gráfico
Subida gradual · Memoria del proceso del juego
Dónde mirar
Registrar durante varias horas Process(juego)\Private Bytes con el Monitor de rendimiento. En dispositivos móviles, el motivo de cierre en ApplicationExitInfo de Android (REASON_LOW_MEMORY) y los informes de jetsam de iOS
Se confirma si
La memoria sube cada vez que se cambia de zona y no vuelve a bajar, y cuanto más tiempo lleva encendido, más tirones y cierres forzados hay
Se descarta si
Si la memoria se mantiene estable y solo hay temblores que empeoran con el tiempo encendido: “Pérdida de precisión del tiempo en float”
Se verifica con
En el entorno del jugador
Para saber más
Los teléfonos aguantan sobre todo comprimiendo la memoria. Si aun así falta, el SO cierra el juego en el acto (para el jugador, el juego se cerró solo). Cuanta menos RAM tiene el dispositivo, antes ocurre.

Fuentes

  1. Memory allocation among processes Android (Google)
    Android aguanta comprimiendo la memoria en zRAM; si no basta, el low memory killer termina procesos, y si se cierra la app en primer plano parece un crash
  2. Identifying high-memory use with jetsam event reports Apple
    iOS cierra a la fuerza las apps (jetsam) si la presión de memoria no se alivia, y toda app que supera su límite de memoria pasa a ser candidata al cierre
  3. Find user-mode memory leaks with Performance Monitor (PerfMon) Microsoft
    Registrar durante mucho tiempo Process > Private Bytes (memoria privada asignada por el proceso) y Virtual Bytes; si no dejan de crecer, hay una fuga
  4. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY: el low memory killer del sistema terminó el proceso de la app (los dispositivos que no lo admiten lo reportan como REASON_SIGNALED con SIGKILL)

Ver también

Misma capa: L1 Proceso del juego en el cliente

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

Ver la ficha interactiva con gráficos y simulaciones