THE ORB
Démarrage du studio

FATAL ERROR : mémoire du tas JavaScript épuisée

Un script a consommé toute la mémoire disponible et a emporté le serveur avec lui. Quelque chose est conservé et jamais libéré.

groupsTout le serveur tombecodeIl faut un développeur

Faites d'abord ceci

Notez quelle ressource et depuis combien de temps le serveur tournait. Celui-ci demande une vraie recherche.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Une ressource Node a utilisé plus de mémoire que V8 n'autorise et le runtime a abandonné. Sur FXServer, cela peut emporter tout le serveur, parce que le runtime JavaScript est dans le même processus.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    Une fuite : quelque chose qui s'accumule et n'est jamais vidé

    Le classique : un objet par joueur ajouté à la connexion et jamais retiré à la déconnexion. Tout va bien pendant une heure, puis cela meurt au pic.

  2. 2

    Charger quelque chose d'énorme en mémoire

    Lire un gros fichier ou une table entière dans un tableau d'un seul coup.

  3. 3

    Un cache sans limite

    Une Map indexée par quelque chose d'illimité, jamais purgée.

  4. 4

    Un écouteur enregistré par événement plutôt qu'une seule fois

    Des gestionnaires qui s'accumulent à chaque déclenchement.

  5. 5

    Tout simplement trop peu de mémoire pour la charge

    Avoir réellement besoin de plus que le tas par défaut.

Comment savoir laquelle est la vôtre

Observez le processus pendant une heure. Une mémoire qui monte et ne redescend jamais entre les pics de fréquentation est une fuite ; une mémoire qui grimpe sur une action précise, c'est cette action.

Où regarder

Tout ce qui grossit : chaque push, chaque set et chaque [clé] = sur un objet au niveau du module dans la ressource qui est morte.

Comment la corriger

Nettoyez à la déconnexion, et bornez chaque cache :

on('playerDropped', (reason) => {
    const src = global.source
    delete playerState[src]        // la ligne qu'on oublie
})

Augmenter le tas gagne du temps, cela ne corrige pas une fuite :

# server.cfg — un contournement, pas une solution
set node_args "--max-old-space-size=4096"

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Script Optimizer lit le script et répare le code derrière tout ça.

Les erreurs qui voyagent avec celle-ci