JavaScript bleibt aufgrund seiner Vielseitigkeit eine der am häufigsten verwendeten Programmiersprachen. Um JavaScript außerhalb einer Browserumgebung auszuführen, müssen Entwickler Node.js installieren, eine plattformübergreifende Laufzeitumgebung.
Der JavaScript-Heap-Fehler „Nicht genügend Arbeitsspeicher“ tritt häufig auf, wenn ein JavaScript-Node.js-Projekt ausgeführt wird.
Das JavaScript-Heap-out-of-Memory-Problem ist ein Fehler, der auftritt, wenn der vom Computersystem zugewiesene Standardspeicher nicht ausreicht, um ein großes Projekt auszuführen.
Wenn Sie auf den Fehler Heap out of Memory stoßen, stürzt Ihr Programm ab und zeigt diese Ausgabe an.
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
Or
Fatal error: invalid table size allocation failed - javascript heap out of memory
Causes of JavaScript heap out of memory error
- Vorhandensein großer Datenstrukturen: Das Arbeiten mit großen Datenstrukturen wie Matrizen oder Arrays kann viel Platz verbrauchen und schließlich zu einem Heap-out-of-Memory-Fehler führen.
Dies ist ein Beispiel für eine große Datenstruktur mit einer Milliarde Elementen;
let array = [];
for (let i = 0; i < 1000000000; i++) {
array.push(i);
}
- Schlechte Speicherverwaltung: Wenn Ihre Anwendung wächst, müssen Sie einige der Objekte loslassen, die Sie nicht mehr benötigen.
Dies ist ein Beispiel für eine Funktion, die zu einem Speicherverlust führt;
let array = [];
setInterval(function() {
array.push(new Array(1000000).join("x"));
}, 1000);
- Endlosschleifen: Ein solcher Code läuft ewig, da eine Abbruchbedingung nie erreicht wird.
Dies ist ein Beispiel für eine Endlosschleife, die für immer ausgeführt wird;
while (true) {
console.log(1);
}
Endlosschleifen können zu diesem Fehler führen, da der Speicher ziemlich schnell verbraucht wird.
- Rekursive Funktionen: Eine rekursive Funktion ist eine Funktion, die sich selbst indirekt oder direkt aufruft, um eine/bestimmte Anweisung(en) zu wiederholen, bis eine/ein bestimmte(n) Bedingung(en) erfüllt ist/sind. Wenn diese Funktionen gut konzipiert sind, führen sie wahrscheinlich zu Speicherausfällen und schließlich zu Speicherfehlern.
- Vorhandensein vieler Objekte in einem Stück Code: Wenn Ihr Code viele große Objekte enthält, kann der von diesen Objekten insgesamt belegte Speicher zu einer Überlastung führen.
Fix JS heap out of memory error
Dieser Fehler kann in Windows-, macOS- und Linux-basierten Betriebssystemen wie Ubuntu auftreten. Glücklicherweise ist der Fehler unabhängig von Ihrem Betriebssystem behebbar.
# 1. Behebung des JavaScript-Heap-Fehlers unter Windows OS
Schritt 1: Klicken Sie auf Startmenü und suchen Sie Advanced System Settings
.
Schritt 2: Klicken Sie auf Environment Variables
im unteren linken Teil des Dialogfelds.

Schritt 3: Klicken Sie auf New
an jeder User variables
or System variables
. Die erste Option wendet die Änderungen auf das aktuelle Benutzerkonto an. Die zweite Option wendet die Änderungen jedoch auf das gesamte System an.

Schritt 4: Es werden zwei Optionen angezeigt; An variable name
, eingeben NODE_OPTIONS
und Variable value
, eingeben --max-old-space-size=4096
. In diesem Schritt wird die 4096
Abbildung weist Node.js 4 GB virtuellen Speicher zu. Sie können mehr zuweisen, z. B. 8 GB, indem Sie den Wert auf –max-old-space-size=8192 festlegen.

Schritt 5: Klicken Sie auf ok
, apply
und schlussendlich, ok
um die Änderungen zu speichern.
Sie können den Fehler auch mit dem Windows PowerShell-Terminal beheben. Öffnen Sie das Terminal auf Ihrem Windows-Betriebssystem und geben Sie den folgenden Befehl ein;
env:NODE_OPTIONS="--max-old-space-size=4096"

Sie können den Fehler auch vorübergehend beheben, indem Sie diesen Befehl ausführen, bevor Sie Ihre App ausführen.
set NODE_OPTIONS=--max-old-space-size=4096
# 2. Behebung des JavaScript-Heap-Fehlers unter Linux
- Schritt 1: Identifizieren Sie die Fehlerquelle. Überprüfen Sie die Konsolenprotokolle oder -ausgaben, um die Code-/Dateizeilen zu ermitteln, die den Fehler verursachen.
- Schritt 2: Exportieren Sie eine Umgebungsvariable, die den virtuellen Speicher angibt, den Sie Node.js zugewiesen haben. Verwenden Sie diesen Befehl;
export NODE_OPTIONS=--max-old-space-size=4096

Diese Schritte weisen Node.js 4 GB virtuellen Speicher zu. Wenn der Fehler weiterhin besteht, können Sie die Speichergröße durch Verdoppeln erhöhen.
Wenn Sie beispielsweise 8 GB als virtuellen Speicher zuweisen möchten, können Sie diesen Befehl ausführen.
export NODE_OPTIONS=--max-old-space-size=8192
# 3. Behebung des Fehlers „JavaScript-Heap-out-of-Memory“ unter macOS
Sie können den JavaScript-Heap-out-of-Memory-Fehler in macOS mit einem ähnlichen Ansatz wie in Linux lösen. Folge diesen Schritten;
- Schritt 1: Identifizieren Sie die Fehlerquelle, indem Sie die Konsolenprotokolle oder -ausgaben überprüfen, um die Codezeilen/Datei zu bestimmen, die den Fehler verursachen.
- Schritt 2: Exportieren Sie eine Umgebungsvariable, die den virtuellen Speicher angibt, den Sie Node.js zugewiesen haben. Verwenden Sie diesen Befehl;
export NODE_OPTIONS=--max-old-space-size=4096
Diese Schritte weisen Node.js 4 GB virtuellen Speicher zu. Wenn der Fehler weiterhin besteht, können Sie die Speichergröße durch Verdoppeln erhöhen.
Wenn Sie beispielsweise 8 GB als virtuellen Speicher zuweisen möchten, können Sie diesen Befehl ausführen.
export NODE_OPTIONS=--max-old-space-size=8192
Erhöhen des Arbeitsspeichers während der NPM-Installation
Die bisher von uns angebotenen Lösungen eignen sich für Fehler, die beim Ausführen einer Node.js-Anwendung auftreten. Sie können jedoch virtuellen Speicher zuweisen, um den Heap-out-of-Memory-Fehler zu beheben, während Sie JavaScript-Pakete installieren. Verwenden Sie diesen Befehl;
node --max-old-space-size=4096 (which npm) install
Hinweis: Sie können die Zuweisung des virtuellen Speichers um 1 GB, 2 GB, 3 GB oder 4 GB erhöhen. Sie müssen die Speichergröße in MB angeben. Weisen Sie Node.js jedoch nicht den gesamten Arbeitsspeicher des Computers zu, da dies zum Absturz Ihres Programms führen kann. Wenn Ihr Computer über 16 GB verfügt, können Sie Node.js bis zu 8 GB zuweisen.
Prevent JavaScript the heap out of memory error
Wir haben bisher besprochen, wie der JavaScript-Heap-Out-of-Memory-Fehler behoben werden kann, wenn er auftritt. Glücklicherweise können Sie auch Maßnahmen ergreifen, um zu verhindern, dass dieser Fehler auftritt, wenn Sie JavaScript-Code ausführen. Dies sind einige der besten Ansätze:
# 1. Teilen Sie Daten in kleine Stücke auf
Möglicherweise haben Sie ein Node.js-Programm, das große Datensätze aus großen CSV-Dateien über das importiert ETL: Prozess extrahieren – transformieren – laden. Sie werden möglicherweise feststellen, dass Ihre App immer abstürzt, wenn Sie versuchen, die Daten zu importieren. Wenn Sie mit arbeiten MongoDB, können Sie den Fehler beheben, indem Sie eine Befehlszeilenanweisung wie z.
split -l 1000000 users.csv
Dieser Befehl weist Node.js an, eine Datei mit dem Namen Benutzer in mehrere Dateien mit jeweils 1000000 Benutzern aufzuteilen. Der -l flag
gibt an, dass die Datei basierend auf der Anzahl der Codezeilen aufgeteilt werden soll.
# 2. Überwachen Sie die Speichernutzung
Sie können einen Speicherprofiler verwenden, um Speicherlecks in Ihrem Code zu erkennen. Sie können den integrierten Speicher von Node.js und die ChromeDevTools kombinieren, um dies zu erreichen. Die beiden können Probleme in Ihrem Code erkennen und beheben.
Sie können auch externe Tools wie Datadog, New Relic und AppDynamics verwenden, um die Leistung Ihrer App zu überwachen und die erforderlichen Maßnahmen zu ergreifen. Sie können die Speichernutzung in Ihrer Node.js-App auch über die überprüfen process.memoryUsage()
Methode.
# 3. Speicherlecks vermeiden
Speicherlecks treten auf, wenn Ihre Node.js-App Verweise auf Objekte behält, die sie nicht mehr benötigt. Wenn solche Objekte nicht von der Garbage Collection erfasst werden, kommt es im Laufe der Zeit zu einer Zunahme der Speichernutzung.
Es gibt mehrere Ansätze, um Speicherlecks zu vermeiden, z. B. das Vermeiden globaler Variablen in Ihrem Code, das Vermeiden des Blockierens von E/A-Operationen und das Verwenden von let
funktioniert const
Schlüsselwörter beim Deklarieren Ihrer Variablen anstelle von var
.
# 4. Laichprozesse
Wenn Sie Node.js auf einem Computer mit begrenztem Arbeitsspeicher ausführen, z Raspberry Pi, werden Sie wahrscheinlich auf Heap-Out-of-Memory-Fehler stoßen. Sie können einen Masterprozess haben und andere werden als Worker gruppiert. Sobald der Master-Prozess feststellt, dass dem System der Speicher ausgeht, beendet er diesen Prozess und weist die Aufgabe einem anderen zu, der nicht überlastet ist.
# 5. Hardware aktualisieren
Wenn das Erhöhen der Speicherzuweisung und das Ausführen der aufgeführten Prozesse zum Verhindern von Heap-out-of-Memory-Fehlern Ihre Probleme nicht lösen, können Sie eine Aktualisierung Ihrer Hardware in Betracht ziehen. Node.js kann auf einem RAM von nur 512 MB ausgeführt werden. Ihre App wird jedoch mit zunehmendem Wachstum mehr RAM benötigen.
Andererseits kann die Erhöhung der Anzahl der CPUs auch die Speicherzuweisung verbessern. Im Idealfall ermöglichen 2 oder mehr CPUs Ihrer Anwendung die Verwendung von Worker-Threads für CPU-intensive Aufgaben wie Kryptografie und Bildverarbeitung.
FAQs
Dieser Fehler kann mehrere Ursachen haben;
1. Speicherlecks
2. Endlosschleifen
3. Vorhandensein vieler Objekte in einem Projekt
4. Vorhandensein großer Datenstrukturen
Ja. Sie können den Fehler beheben durch;
1. Node.js mehr virtuellen Speicher zuweisen
2. Beseitigen von Speicherlecks
3. Optimierung Ihres Codes
4. Upgrade Ihrer Hardware
React ist eine der beliebtesten JavaScript-Bibliotheken. Suchen Sie die Datei „package.json“ im Stammverzeichnis und diese Zeilen im Abschnitt „Skripts“.
"scripts": {
"start": "react-scripts --max_old_space_size=4096 start",
"build": "react-scripts --max_old_space_size=4096 build",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
Fazit
Die meisten Entwickler sind an Fehler und Codefehler gewöhnt, nicht an Laufzeitfehler, wenn sie ihre Node.js-Programme ausführen. Glücklicherweise müssen Sie sich keine Sorgen machen, da der Heap-Out-of-Memory-Fehler behoben werden kann. Wir haben definiert, was ein JavaScript-Heap-out-of-Memory-Fehler ist, erklärt, wie Sie ihn lösen und wie Sie ihn in Ihrem nächsten Node.js-Projekt vermeiden können.
Als nächstes können Sie auch lesen, wie Sie einige häufige vermeiden können JavaScript-Fehler.