Aunque el servidor esté escrito en C++, si las misiones, la IA y las habilidades se ejecutan en scripts como Lua, la zona se detiene mientras corre el GC del motor de scripts.
Por qué En cada zona, el motor de scripts ejecuta misiones, IA y eventos, y crea una gran cantidad de objetos temporales → Efecto Cuando el GC del motor de scripts recolecta mucho de una vez, el tick de esa zona se detiene → En pantalla Tirones periódicos solo en ciertas zonas o durante ciertos eventos
Cuando se junta mucha gente, A intervalos regulares
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Configurar el GC incremental o generacional, avanzar el GC un poco en cada tick, reducir los objetos temporales de los scripts.
Cifras de referencia
Si el heap de scripts crece hasta cientos de MB, una recolección hecha de golpe (con la recolección incremental desactivada, o una recolección completa en modo generacional) puede tardar de decenas a cientos de ms.
En el gráfico
Picos periódicos · Tiempo de tick por zona, memoria del motor de scripts
Dónde mirar
Registrar en cada tick el tiempo de tick de cada zona y el uso de memoria de su motor de scripts (en Lua, collectgarbage("count")), y superponerlos en un mismo gráfico
Se confirma si
Los momentos en que la memoria de scripts cae de golpe (una recolección hecha de una vez) coinciden con los picos de tick de esa zona, y las demás zonas están bien
Se descarta si
Si hay picos sin cambios en la memoria de scripts, apunta a la carga o a locks de esa zona. Si todas las zonas del servidor tienen picos a la vez: GC del servidor (mem-gc) o swap (mem-swap)
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Fuentes
Lua 5.4 Reference ManualLua.org El modo incremental divide la recolección en pasos pequeños intercalados con la ejecución (con pasos grandes, se detiene todo); la recolección major del modo generacional recorre todos los objetos y lo detiene todo; collectgarbage("count") devuelve la memoria total que usa Lua (KB)