THE ORB
Iniciando o studio

FATAL ERROR: acabou a memória do heap do JavaScript

Um script consumiu toda a memória disponível e derrubou o servidor junto. Alguma coisa é guardada e nunca liberada.

groupsO servidor inteiro caicodePrecisa de um desenvolvedor

Faça isto primeiro

Anote qual resource era e há quanto tempo o servidor estava no ar. Esse precisa ser achado direito.

bug_reportMelhor colar o console inteiro

O que significa

Um resource baseado em Node usou mais memória do que o V8 permite e o runtime abortou. No FXServer isso pode levar o servidor inteiro junto, porque o runtime de JavaScript vive dentro do mesmo processo.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Um vazamento: alguma coisa que se acumula e nunca é limpa

    O clássico é um objeto por jogador que se adiciona na entrada e nunca é removido na saída. Parece bem por uma hora e morre no pico.

  2. 2

    Carregar algo enorme na memória

    Ler um arquivo grande ou uma tabela inteira dentro de um array de uma vez só.

  3. 3

    Um cache sem teto

    Um Map com uma chave de variedade ilimitada, do qual nunca se remove nada.

  4. 4

    Um listener registrado por evento em vez de uma vez só

    Handlers que se acumulam a cada disparo.

  5. 5

    Simplesmente pouca memória para o trabalho

    Precisar de verdade de mais do que o heap padrão.

Como saber qual é o seu

Olhe o processo durante uma hora. Memória que sobe e nunca volta a descer entre picos de jogadores é um vazamento; memória que dá um pico numa ação específica é aquela ação.

Onde olhar

Seja lá o que cresça: cada push, cada set e cada [chave] = sobre um objeto em nível de módulo dentro do resource que morreu.

Como consertar

Limpe ao desconectar, e ponha um teto em cada cache:

on('playerDropped', (reason) => {
    const src = global.source
    delete playerState[src]        // a linha que as pessoas esquecem
})

Aumentar o heap compra tempo, não conserta um vazamento:

# server.cfg — um paliativo, não uma solução
set node_args "--max-old-space-size=4096"

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 lê o script e conserta o código por trás disso.

Erros que andam junto com este