Start·Fehlermeldungen

node · npm

Die Meldung

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

Was es bedeutet

Der V8-Heap hat seine Obergrenze erreicht und node hat von sich aus aufgegeben — das Betriebssystem hat es nicht getötet, node entschied, nicht weiter wachsen zu können, und hielt an. Ursache ist eine große Typprüfung oder Bündelung, ein Build mit Source Maps in einem großen Projekt, oder lecker Code, der etwa alles in einem Array anhäuft. export NODE_OPTIONS=--max-old-space-size=4096 hebt die Grenze auf 4 GB und reicht oft, doch die Maschine muss diesen Arbeitsspeicher wirklich haben; ist das Limit eines Containers niedriger, tötet stattdessen das Betriebssystem den Prozess, was als Exit-Code 137 erscheint. Muss die Zahl immer weiter wachsen, ist ein Leck die Ursache und nicht die Grenze.

Die Lösung

export NODE_OPTIONS=--max-old-space-size=4096
Ausgegeben von
node
npm
20

Bei npm steht die Ursache in der ersten code-XXXX-Zeile und nicht in den letzten sechs npm-ERR!-Zeilen, und wenn der Fehler aus dem Abhängigkeitsbaum oder einem Native-Build statt aus eigenem Code kommt, löst das Löschen von node_modules mit erneuter Installation etwa die Hälfte.

Eine Fehlermeldung lesen

  • Von der ersten Zeile abwärts lesen. Weiter unten geht es um das Innere des Werkzeugs; die Ursache steht meist oben.
  • Gibt es Datei und Zeilennummer, dort anfangen — nicht der oberste Stack-Frame, sondern die oberste Zeile, die eine eigene Datei nennt.
  • Die Meldung wörtlich suchen, vorher aber eigene Pfade und Variablennamen entfernen; genau die verhindern den Treffer.
  • Dieselbe Lage wird je Werkzeugversion anders formuliert. Passen die Treffer nicht, die Versionsnummer mit in die Suche.
  • Vor dem Einfügen einer Lösung prüfen, was sie verwirft. Manches davon lässt sich nicht zurückholen.

Häufige Fragen

Q. Was bedeutet „FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory“?

Der V8-Heap hat seine Obergrenze erreicht und node hat von sich aus aufgegeben — das Betriebssystem hat es nicht getötet, node entschied, nicht weiter wachsen zu können, und hielt an. Ursache ist eine große Typprüfung oder Bündelung, ein Build mit Source Maps in einem großen Projekt, oder lecker Code, der etwa alles in einem Array anhäuft. export NODE_OPTIONS=--max-old-space-size=4096 hebt die Grenze auf 4 GB und reicht oft, doch die Maschine muss diesen Arbeitsspeicher wirklich haben; ist das Limit eines Containers niedriger, tötet stattdessen das Betriebssystem den Prozess, was als Exit-Code 137 erscheint. Muss die Zahl immer weiter wachsen, ist ein Leck die Ursache und nicht die Grenze.

Q. Wie behebe ich das?

export NODE_OPTIONS=--max-old-space-size=4096 — vor dem Ausführen oben prüfen, was dieser Befehl verwirft.

Q. Welches Werkzeug gibt das aus?

node. Es gehört zu npm, und die Meldung hat 13 Wörter.

Verwandte Fehler