Speicherverbrauch und Memory Leaks in Node.js überwachen
Startup House
10. Dez. 2021・5 Min. Lesezeit
Inhaltsverzeichnis
Was ist ein 'Memory Leak' in Node.js?
Was ist Garbage Collection in Node.js?
Ein Beispiel für eine App mit Memory Leak
Memory Leaks mit Node Inspector und Chrome DevTools erkennen
3 Snapshots von Memory Leaks in Node.js
Fazit – Kenne deine Tools
Für Node.js-Entwickler können Memory Leaks zum echten Albtraum werden – und das Erwachen ist nicht so einfach wie ein Aufschrei in der Nacht. Je länger diese Leaks unentdeckt bleiben, desto länger zieht sich der böse Traum hin.
Heißt konkret: CPU- und Speicherauslastung, Load Average und Antwortzeit einer Anwendung mit Memory-Leak-Bugs steigen kontinuierlich, bis die CPU 100 % erreicht – danach reagiert der Dienst nicht mehr. Das sind typische Symptome, wenn eine Anwendung unter einem Memory Leak leidet.
Bist du als Entwickler davon betroffen, lies weiter: Hier erfährst du, wie du diese Symptome angehst und wie du Speicherverbrauch und Memory Leaks in Node.js-Anwendungen überwachst.

Was ist ein 'Memory Leak' in Node.js?
Einfach gesagt ist ein Memory Leak ein Problem, bei dem eine Anwendung einen Speicherblock allokiert, ihn aber nicht wieder freigibt – oder bei dem der Node.js Garbage Collector ihn nicht bereinigen konnte.
Naja, so in etwa ...
Was ist Garbage Collection in Node.js?
Zunächst müssen wir beim Thema Memory Leak den Garbage Collector ins Spiel bringen. Ganz einfach gesagt: Der Garbage Collector ist ein automatischer Mechanismus, der Speicher von nicht mehr verwendeten Objekten zurückgewinnt.
Im ersten Zyklus ("mark") markiert der Garbage Collector ungenutzte Objekte zur Löschung. Im zweiten Zyklus ("sweep") wird der Speicher freigegeben.

Ein Beispiel für eine App mit Memory Leak
Für diesen Leitfaden habe ich eine einfache Express.js-Anwendung erstellt, in der jede Anfrage ein leak-Array über die Laufzeit hinweg wachsen lässt – und so den Dienst verlangsamt. Dieses leak-Array wird nirgends manuell geleert, und die Garbage Collection wirkt sich nicht auf global deklarierte Variablen aus.
Memory Leaks mit Node Inspector und Chrome DevTools erkennen
Um Node Inspector zu nutzen, müssen wir unsere App im Inspect-Mode starten, und in CLI TypeScript:
node --inspect index.js
Dein Script sollte dann mit der Inspect-Option im DevTools/Devices-Tab erscheinen. Klicke auf Inspect, damit Chrome DevTools sich an das Node-Skript anhängt. Uns interessieren hier vor allem der Memory-Tab und die Heap-Snapshot-Option.

3 Snapshots von Memory Leaks in Node.js
Um zu testen, ob unsere Anwendung ein Memory Leak hat, nehmen wir 3 Heap-Snapshots. Der erste direkt nach dem Start des Servers; der zweite nach einem Benchmark mit 1000 Requests an unseren Server und der dritte nach einem weiteren Benchmark mit 1000 Requests.
Der zweite Snapshot nach dem ersten Benchmark mit 1000 Requests kann als Warnsignal dienen, wenn der Heap gewachsen ist. Also machen wir den letzten Snapshot nach dem zweiten Benchmark: So lässt sich bestätigen, ob die Anwendung ein Memory Leak hat.
Um die Ursache zu finden, wähle den dritten Snapshot aus, klicke auf die Vergleichsoption und vergleiche ihn mit dem ersten Snapshot. So lassen sich seit dem Serverstart neu erstellte Objekte und Daten identifizieren.
Im letzten Schritt schauen wir uns diese Objekte genauer an und suchen nach Objekten mit gleicher Allokationsgröße. Durch diese Untersuchung lassen sich die Memory Leaks in unserer Anwendung auffinden und beheben.
Fazit – Kenne deine Tools
Wenn du auf bewährte Bibliotheken setzt, ist das Beheben eines Node.js-Memory-Leaks meist deutlich einfacher als das Aufspüren. Entscheidend ist ein gutes Verständnis der Garbage Collection in den DevTools sowie der anderen Tools, die du beim Entwickeln nutzt. Mit den verschiedenen Debuggern, Leak-Catchern und Tools zur Erstellung von Nutzungsdiagrammen kannst du Leaks gezielt isolieren – und sorgst so dafür, dass deine Software schneller und effizienter läuft.
Bei Startup Development House sind wir zugegeben ziemlich erfahren im Umgang mit Node.js – und darin, auftretende Probleme zu lösen. Wenn du als angehender Entwickler etwas von dieser Expertise gebrauchen kannst, melde dich gern unter hello@start-up.house
Digital Transformation Strategy for Siemens Finance
Cloud-based platform for Siemens Financial Services in Poland


Das könnte Ihnen auch gefallen...

So finden Sie 2023 die beste Node.js-Entwicklungsagentur: Ein umfassender Leitfaden
Node.js hat sich als Schlüsseltechnologie für die Entwicklung robuster, skalierbarer Webanwendungen etabliert. Vor diesem Hintergrund ist die Rolle einer Node.js-Entwicklungsagentur wichtiger denn je. Dieser Artikel zeigt Ihnen, wie Sie die besten Node.js-Entwicklungsunternehmen für Ihre spezifischen Anforderungen auswählen.
Marek Pałys
02. Feb. 2023・6 Min. Lesezeit

Tutorial: Ruby und Ruby on Rails installieren und RubyGems verwenden
Entdecken Sie eine Schritt-für-Schritt-Anleitung zur Installation und Nutzung von Ruby on Rails für die effiziente Entwicklung von Webanwendungen. Erfahren Sie, wie Sie Ruby einrichten, verschiedene Versionen verwalten, mit RubyGems und Bundler arbeiten und ein neues Ruby on Rails-Projekt erstellen. Starten Sie mit diesem umfassenden Leitfaden in die Entwicklung mit Ruby on Rails.
Jan Grela
20. März 2020・6 Min. Lesezeit

Tech-Stack 2020: GraphQL, Apollo Server und React.js
Seit dem Jahr 2000 gelten RESTful-Prinzipien als Branchenstandard für den Aufbau von Web-APIs – doch GraphQL bietet eine effizientere Alternative. Dieser Artikel beleuchtet die Vorteile von GraphQL gegenüber REST, seine Popularität und zeigt, wie man mit Apollo GraphQL einen Server und eine Client-Anwendung entwickelt.
Wojciech Cichoradzki
12. Mai 2020・7 Min. Lesezeit
Bereit, Ihr Know-how mit KI zu zentralisieren?
Beginnen Sie ein neues Kapitel im Wissensmanagement – wo der KI-Assistent zum zentralen Pfeiler Ihrer digitalen Support-Erfahrung wird.
Kostenlose Beratung buchenArbeiten Sie mit einem Team, dem erstklassige Unternehmen vertrauen.
Wir entwickeln, was als Nächstes kommt.
Dienste




