Zum Hauptinhalt springen

Probleme mit Speichermangel in einer Node.js-App auf Docker-Basis

Problem

  • Beim Ausführen einer Node.js-App auf Docker-Basis ist während des Betriebs des Servers ein out of memory-Problem aufgetreten.
  • In der v8-Engine von Node.js ist standardmäßig eine Begrenzung des Heap-Speichers festgelegt. Die folgenden Begrenzungskapazitäten des Heap-Speichers sind verfügbar:
    • v12 und darunter: 1,35 GB
    • v14 und darunter: 2 GB
    • v14 und höher: 4 GB
  • Da wir diese Speicherbegrenzung nicht kannten, hat die App weiterhin Speicher verwendet und der Service ist abgestürzt.
  • Die Instanz dieses Dienstes hatte 12 GB RAM und es waren noch mehr als 7 GB freier Speicherplatz vorhanden, als viel Speicher verwendet wurde.
  • Da wir die Struktur des Dienstes nicht richtig verstanden haben, wurde Speicher verschwendet und die Verfügbarkeit des Dienstes hat abgenommen.

Lösung

  • Bei der Ausführung von Node.js verwenden Sie node --max-old-space-size=8192 start.js, um --max-old-space-size hinzuzufügen.
  • Bei Docker fügen Sie NODE_OPTIONS=--max-old-space-size=8192 als Umgebungsvariable hinzu.
  • Durch Hinzufügen dieser Optionen wird der maximale Heap des Programms erhöht und die Verfügbarkeit des Dienstes verbessert.