Unabhängiger Vergleich · keine bezahlten Platzierungen
Startseite / Blog / Technik / Node.js-Speicherleck: Überwachen Sie den Prozess vor einem erzwungenen Neustart

Node.js-Speicherleck: Überwachen Sie den Prozess vor einem erzwungenen Neustart

Durch den Neustart von Node.js jede Nacht wird das Leck ausgeblendet – bis das Intervall nicht mehr ausreicht und PM2 in eine Schleife zum OOM-Kill übergeht.

Redaktion Hébergeurs.eu 5 Min. Aktualisiert 19 Juli 2026

Stabile Knoten-API bei 512 MB RAM. Einen Monat später: PM2 startet alle vier Stunden neu. Wir fügen „max_memory_restart=800M“ hinzu – starten Sie die Schleife während der Mittagsspitze mit vierzig pro Minute neu. Post-Mortem: Globaler „Map“-Cache, indiziert durch Benutzer-ID ohne Räumung, eingeführt mit der Funktionalität „temporäre Sitzungen“ – langsames Leck, in einem zehnminütigen Test unsichtbar.

Der Knoten gibt Speicher nicht aggressiv an das Betriebssystem zurück – heapUsed kann nach einem Garbage Collector fehlschlagen. Bei einem Leck handelt es sich um ein Trendwachstum unter repräsentativer Auslastung, nicht um einen Spitzenwert nach der Bereitstellung. Ein Neustart jede Nacht verbirgt das Problem, bis eines Tages das Intervall nicht mehr ausreicht.

Vor dem Neustart überwachen

Messen Sie, worauf es ankommt:

MetrischSignal
process.memoryUsage().heapUsedTrend nach Garbage Collection
RSSEs ist das RSS, das der OOM-Killer beobachtet
Verzögerung der EreignisschleifeLeckage + Last = Latenz der Ereignisschleife
Häufigkeit von GC-PausenErhöht sich, wenn der Stapel wächst

Gängige Werkzeuge:

  • Prometheus mit node_exporter und Anwendungsmetriken „/metrics“.
  • PM2 pm2 monit, --max-memory-restart gekoppelt mit einer Warnung, wenn der Neustartzähler steigt
  • APM (Datadog usw.) zur Korrelation von Heap- und langsamen Abfragen

Faustregel: ein geplanter Neustart mit Maske – Legen Sie eine RSS-Benachrichtigung > Grundlinie × 1,5 für eine Stunde fest, bevor Sie einen nächtlichen Cron hinzufügen.

Ein Neustart ohne Diagramm bedeutet, den Krankenwagen ohne Diagnose zu bezahlen.

Heap-Diagnose

Vorgehensweise im Staging, dann in der Produktion außerhalb der Spitzenzeiten:

  1. Wiederholen Sie eine lange Ladung (k6 für mindestens zwei Stunden).
  2. Erfassen Sie am Anfang und am Ende einen Heap-Snapshot – „--inspect“ oder „--heapsnapshot-near-heap-limit“ (Knoten 18+).
  3. Vergleichen Sie in Chrome DevTools (Vergleich) – die Anzahl der Objekte nimmt zu.
  4. Montieren Sie die Halterungen (Verschluss, Array, Puffer) wieder.

Häufige Ursachen für die Web-API:

  • „setInterval“ wurde nie mit „clearInterval“ abgebrochen
  • „socket.on“ ohne „removeListener“ dupliziert
  • – Globales Objekt „{ [reqId]: largeObject }“ wurde nie gelöscht

  • Protokollierungsbibliothek mit Kontextreferenzen

Hosting- und Speicherbeschränkungen

In Containern oder Kubernetes tötet das Speicherlimit Node durch SIGKILL ohne ordnungsgemäßes Herunterfahren. Legen Sie die Grenze über den maximalen Heapspeicher plus etwas Spielraum für nativen Code fest – oder beheben Sie das Leck.

Auf VPS wird durch Swap die Leistung ausgeblendet und dann zunichte gemacht – Warnung bei RSS, nicht nur bei der CPU. Ein einzelner Knotenprozess: Das Leck betrifft den gesamten Dienst. Der PM2-Clustermodus behebt das Leck nicht, sondern vervielfacht es auf mehrere Worker.

Vergleichen Sie Node-geeignete VPS-Angebote über das Verzeichnis und den Vergleich. Für die Bereitstellung mit PM2 in Produktion kreuzen.

PM2: Neustart versus Korrektur

„max_memory_restart“: vorübergehend mit einem Prioritätsermittlungsticket akzeptabel.

Nächtlicher Cron-Neustart: tolerierbar, wenn kein bekanntes Leck (Memory Return to OS-Seltsamkeit) – kein Ersatz für eine Korrektur.

Kombinieren Sie max_restarts und exp_backoff_restart_delay, um Neustartschleifen zu vermeiden, die WebSockets mitten in der Spitzenzeit herunterfahren.

The Top: Auto-Reboot ist eine sich anhäufende Schuld

Folgendes verbirgt PM2, wenn alles stabil zu sein scheint.

Teamkultur: Heap-Snapshot vor dem Hinzufügen von max_memory_restart – oder zumindest ein veraltetes Ursachenticket.

Entscheide dich und gehe ohne blinden Fleck voran

Bevor Sie einen Neustart-Cron hinzufügen:

  1. Sieben-Tage-RSS-Diagramm bei normalem Datenverkehr – erkennen Sie den Trend, nicht isolierte Spitzen.
  2. Warnung zum PM2-Neustartzähler – nicht nur zur HTTP-Verfügbarkeit.
  3. Langlasttest im Staging – mindestens zwei Stunden, um ein langsames Leck aufzudecken.
  4. Beheben Sie die im Snapshot identifizierten Retainer – Karte ohne TTL, Listener, Timer.
  5. Entfernen Sie den Cron-Neustart, wenn sich die Speicherkurve nach der Korrektur stabilisiert.

Konsultieren Sie PM2-Bereitstellung, um Best Practices für die Überwachung zu finden, und das Verzeichnis, um einen VPS mit genügend RAM auszuwählen, um einen Heap-Snapshot außerhalb der Spitzenzeiten zu erfassen.

Häufig gestellte Fragen

Wie erkennt man einen Node.js-Speicherverlust?

Beobachten Sie die RSS- oder Heap-Verwendung über mehrere Stunden oder Tage hinweg bei stabilem Datenverkehr. Wenn die Kurve nach der Speicherbereinigung ansteigt, ohne abzufallen, liegt wahrscheinlich ein Leck vor. Ein Anstieg und dann ein Abfall ist normal; ein aufsteigendes Plateau ist es nicht.

PM2 max_memory_restart reicht?

Dies ist eine Notlösung – wird vor OOM recycelt, verliert jedoch den Status, verbirgt die Grundursache und kann zu einer Schleife führen. Kombinieren Sie dies mit einer Warnung und einer Heap-Untersuchung, bevor Sie das Problem als gelöst betrachten.

Heapdump in der Produktion?

Möglich außerhalb der Spitzenzeiten mit „--heapsnapshot-near-heap-limit“ (Knoten 18+) oder manuell ausgelöstem „Heapdump“-Modul. Analysieren Sie in Chrome DevTools – vermeiden Sie Spitzenzeiten, ohne die Auswirkungen zu messen.

Klassische Lecks in der Node-Web-API?

Abschlüsse, bei denen Abfragereferenzen erhalten bleiben, Ereignis-Listener, die nicht entfernt werden, Kartencache ohne Lebensdauer, aggregierte Puffer, vergessene Timer – alles hinterlässt eine langsam ansteigende RSS-Kurve.


Die Überwachung der Speicherkurve kostet weniger als ein PM2, das an dem Tag, an dem das Leck den Cron einholt, in einer Schleife neu startet.

Europäische Hoster vergleichen

Filtern nach Compliance, Standort und Einsatzzweck — dann die Datenblätter öffnen, um den echten Umfang zu prüfen.

Verzeichnis durchsuchen
Blog

Weiterlesen

Alle Artikel →