Se agotó la memoria de scripts
Algo se quedó sin memoria. No tiene que ver con lo ocupado que esté el servidor: algo se acumula y nunca se limpia.
Haz esto primero
Anota cuánto llevaba corriendo el servidor. Si reiniciar lo arregla un rato, es una fuga.
Qué significa
Un runtime de scripts pidió memoria que no pudo conseguir. En el cliente esto hace caer el juego; en el servidor normalmente se lleva el recurso, y a veces el proceso.
A diferencia de un tirón, esto no es un síntoma de carga: es un síntoma de acumulación. Algo se está guardando que tendría que haberse liberado.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
Una tabla que sólo crece
Estado por jugador que se añade al entrar y no se quita nunca al salir. Sobrevive a las pruebas y se muere en el pico.
- 2
Entidades creadas y nunca borradas
Cada una cuesta memoria además de un hueco en el pool.
- 3
Una caché sin desalojo
Con clave en algo sin tope: coordenadas, marcas de tiempo, ids de red.
- 4
Cadenas muy grandes retenidas en memoria
El JSON de una tabla entera guardado en una variable en vez de consumirse y soltarse.
- 5
Clausuras que capturan más de lo que necesitan
Cada clausura mantiene vivos sus valores capturados, así que un solo callback guardado puede impedir para siempre que se recoja una tabla grande.
Cómo saber cuál es el tuyo
Miralo a lo largo del tiempo y no en un instante:
-- servidor, una vez por minuto
print(('lua kb: %.0f'):format(collectgarbage('count')))Un número que sólo sube a través de los picos de jugadores es una fuga. Uno que sube y baja es normal.
Dónde mirar
Cada tabla a nivel de archivo en el recurso que murió, y si algo le saca cosas alguna vez.
Cómo arreglarlo
Quitá al salir, siempre:
AddEventHandler('playerDropped', function()
local src = source
playerState[src] = nil -- la línea que la gente olvida
cache[src] = nil
end)¿Sigues atascado en tu propio código?
Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.
bug_reportAbrir el Server FixerPara este tipo de error, el Script Optimizer encuentra qué te está costando fotogramas y lo reescribe.