THE ORB
Arrancando el studio

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.

groupsSe cae tras horas encendidocodeNecesita un desarrollador

Haz esto primero

Anota cuánto llevaba corriendo el servidor. Si reiniciar lo arregla un rato, es una fuga.

bug_reportMejor pega tu consola entera

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. 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. 2

    Entidades creadas y nunca borradas

    Cada una cuesta memoria además de un hueco en el pool.

  3. 3

    Una caché sin desalojo

    Con clave en algo sin tope: coordenadas, marcas de tiempo, ids de red.

  4. 4

    Cadenas muy grandes retenidas en memoria

    El JSON de una tabla entera guardado en una variable en vez de consumirse y soltarse.

  5. 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 Fixer

Para este tipo de error, el Script Optimizer encuentra qué te está costando fotogramas y lo reescribe.

Errores que viajan con este