FATAL ERROR: JavaScript-Heap-Speicher erschöpft
Ein Script hat den ganzen verfügbaren Speicher verbraucht und den Server mitgerissen. Etwas wird behalten und nie freigegeben.
Mach das zuerst
Notier, welche Resource es war und wie lange der Server schon lief. Das hier muss richtig gesucht werden.
Was es bedeutet
Eine Node-Resource hat mehr Speicher verbraucht, als V8 erlaubt, und die Runtime hat abgebrochen. In FXServer kann das den ganzen Server mitreißen, weil die JavaScript-Runtime im selben Prozess läuft.
Was es auslöst
Sortiert danach, wie oft es die Antwort ist.
- 1
Ein Leck: etwas, das sich anhäuft und nie geleert wird
Der Klassiker ist ein Objekt pro Spieler, das beim Beitritt angelegt und beim Verlassen nie entfernt wird. Eine Stunde sieht alles gut aus, zur Spitze stirbt es.
- 2
Etwas Riesiges in den Speicher laden
Eine große Datei oder eine ganze Tabelle auf einmal in ein Array lesen.
- 3
Ein Cache ohne Obergrenze
Eine Map mit einem Schlüssel unbegrenzter Vielfalt, aus der nie etwas entfernt wird.
- 4
Ein Listener, der pro Event statt einmal registriert wird
Handler, die sich bei jedem Auslösen ansammeln.
- 5
Schlicht zu wenig Speicher für die Last
Wirklich mehr zu brauchen als den Standard-Heap.
Wie du erkennst, welcher deiner ist
Beobachte den Prozess eine Stunde lang. Speicher, der steigt und zwischen Spielerspitzen nie wieder fällt, ist ein Leck; Speicher, der bei einer bestimmten Aktion hochschnellt, ist diese Aktion.
Wo du nachsehen musst
Was auch immer wächst: jedes push, jedes set und jedes [schlüssel] = auf einem Objekt auf Modulebene in der abgestürzten Resource.
Wie du es behebst
Räum beim Trennen auf und begrenz jeden Cache:
on('playerDropped', (reason) => {
const src = global.source
delete playerState[src] // die Zeile, die man vergisst
})Den Heap zu vergrößern kauft Zeit, es behebt kein Leck:
# server.cfg — ein Notbehelf, keine Lösung set node_args "--max-old-space-size=4096"
Hängst du immer noch an deinem eigenen Code?
Diese Seite sagt, was dieser Fehler üblicherweise bedeutet. Füg deine Konsole in Server Fixer ein: es sortiert alles darin und sagt dir, was zuerst dran ist; und wenn du lieber nicht ranwillst, kann ORBIE das Script reparieren und dir die Resource fertig zum Einsetzen zurückgeben.
bug_reportServer Fixer öffnenFür diese Art Fehler Script Optimizer liest das Script und repariert den Code dahinter.