Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Gelöst: So beheben Sie „JavaScript Heap Out of Memory Error“

JavaScript-Heap-Out-of-Memory-Fehler
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

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. 

1-3

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. 

2-2

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. 

3-1

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"
4-1

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
Bild-213

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

Was verursacht den Fehler „JavaScript Heap Out of Memory“?

Dieser Fehler kann mehrere Ursachen haben;
1. Speicherlecks
2. Endlosschleifen
3. Vorhandensein vieler Objekte in einem Projekt
4. Vorhandensein großer Datenstrukturen

Ist der Fehler "JavaScript Heap Out of Memory" lösbar?

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

Wie können Sie den Heap Out of Memory-Fehler in der React-App lösen? 

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.

Danke an unsere Sponsoren
Weitere großartige Lektüre zum Thema Entwicklung
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder