Node.js frisst Speicher? Eine systematische Anleitung zum Finden und Beheben von Memory Leaks.
Erkennung¶
setInterval(() => console.log(Heap: ${Math.round(process.memoryUsage().heapUsed/1024/1024)} MB), 10000);
Chrome DevTools¶
node –inspect app.js
chrome://inspect -> Memory -> Heap snapshot¶
Ursachen¶
Event Listener¶
// ❌ emitter.on(‘data’, handler) in einer Schleife
// ✅ emitter.once() oder removeListener
Closures¶
Closures halten Referenzen auf grosse Objekte, die der GC sonst einsammeln wuerde.
Globaler Cache¶
// ❌ const cache = {}; cache[key] = data; // waechst unbegrenzt
// ✅ LRUCache mit max size
Nicht geschlossene Streams¶
Schliessen Sie immer DB-Verbindungen, File Streams und HTTP-Verbindungen.
LRU Cache¶
import { LRUCache } from ‘lru-cache’;
const cache = new LRUCache({ max: 500 });
Vorgehensweise¶
Heap Snapshot -> 3 Snapshots vergleichen -> wachsende Objekte finden -> beheben.