THE ORB
Iniciando o studio

Acabou a memória de scripts

Alguma coisa ficou sem memória. Não tem a ver com o quanto o servidor está ocupado: alguma coisa se acumula e nunca é limpa.

groupsCai depois de horas no arcodePrecisa de um desenvolvedor

Faça isto primeiro

Anote há quanto tempo o servidor estava rodando. Se reiniciar resolve por um tempo, é um vazamento.

bug_reportMelhor colar o console inteiro

O que significa

Um runtime de scripts pediu memória que não conseguiu. No cliente isso derruba o jogo; no servidor normalmente leva o resource, às vezes o processo.

Diferente de um engasgo, isso não é sintoma de carga: é sintoma de acúmulo. Alguma coisa está sendo guardada que deveria ter sido liberada.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Uma tabela que só cresce

    Estado por jogador que se adiciona na entrada e nunca é removido na saída. Sobrevive aos testes e morre no pico.

  2. 2

    Entidades criadas e nunca apagadas

    Cada uma custa memória além de uma vaga no pool.

  3. 3

    Um cache sem despejo

    Com chave em algo sem teto: coordenadas, marcas de tempo, ids de rede.

  4. 4

    Strings muito grandes retidas na memória

    O JSON de uma tabela inteira guardado numa variável em vez de ser consumido e solto.

  5. 5

    Closures que capturam mais do que precisam

    Cada closure mantém vivos os valores que capturou, então um único callback guardado pode impedir para sempre que uma tabela grande seja coletada.

Como saber qual é o seu

Olhe ao longo do tempo e não num instante:

-- servidor, uma vez por minuto
print(('lua kb: %.0f'):format(collectgarbage('count')))

Um número que só sobe através dos picos de jogadores é um vazamento. Um que sobe e desce é normal.

Onde olhar

Cada tabela em nível de arquivo no resource que morreu, e se alguma coisa remove dela alguma vez.

Como consertar

Remova na saída, sempre:

AddEventHandler('playerDropped', function()
    local src = source
    playerState[src] = nil        -- a linha que as pessoas esquecem
    cache[src] = nil
end)

Ainda travado no seu próprio código?

Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.

bug_reportAbrir o Server Fixer

Para esse tipo de erro, o Script Optimizer encontra o que está custando quadros e reescreve.

Erros que andam junto com este