Carga diferida (lazy loading) en el servidor Lazy loading on the server
ID de la causa dk-lazy-load · Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Infraestructura de servidores (Equipo de infraestructura)
Si el servidor lee del disco los datos de una mazmorra o un mapa la primera vez que se los piden, el juego se detiene para todos durante ese tick.
Por qué Alguien entra por primera vez en una mazmorra o una zona → Efecto El servidor lee los datos del disco desde el hilo del juego → En pantalla Congelamiento breve para todos los jugadores de ese servidor
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Infraestructura de servidores (Equipo de infraestructura)
Tareas (Equipo de desarrollo)
Precargar los datos al arrancar el servidor, cargar de forma asíncrona.
Tareas (Equipo de infraestructura)
En servidores recién creados desde una instantánea, precalentar el disco antes de ponerlos en servicio (leer todos los bloques una vez) o usar la restauración rápida de instantáneas.
En el gráfico
Picos aleatorios · Tiempo de tick del servidor, lecturas de disco
Dónde mirar
Cruzar la hora de las detenciones con los registros de primera entrada a mazmorras o zonas del log del servidor del juego; en ese momento, revisar las lecturas de disco del servidor del juego (kB_rd/s de pidstat -d) y las llamadas read y open lentas con perf trace --duration. En servidores en la nube recién levantados, comparar VolumeAvgReadLatency de EBS con el de los servidores antiguos
Se confirma si
Solo se detiene la primera vez que alguien entra; al entrar por segunda vez en el mismo sitio, no. Durante la detención, el hilo del juego está esperando una lectura de archivo
Se descarta si
Si se detiene igual en zonas ya cargadas, apunta a otra causa (tick excedido, GC)
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Para saber más
En la nube, un servidor recién creado desde una instantánea (copia del disco) tiene que descargar del almacenamiento remoto cada bloque la primera vez que lo lee, y va mucho más lento de lo normal. Si la primera entrada tarda mucho más solo en los servidores recién levantados por el autoescalado, hay que sospechar de esta causa.
Fuentes
Initialize Amazon EBS volumesAWS Los volúmenes creados desde una instantánea tienen más latencia y menos rendimiento mientras descargan los bloques desde S3; se inicializan de antemano leyendo todos los bloques con dd o fio
Amazon EBS fast snapshot restoreAWS La restauración rápida de instantáneas entrega volúmenes ya inicializados desde su creación y elimina la latencia del primer acceso