Senior LevelExpress JS
How do you identify and resolve memory leaks caused by middleware retaining references in global closures?
❓ Interview Prompt: Explain V8 Heap Snapshot analysis, identifying retained req/res references in global arrays or event emitters, and memory leak resolution.
Memory leaks in Express occur when middleware functions unintentionally append 'req' or 'res' references to global arrays, singletons, or uncleaned event emitters.
Memory Leak Analysis Workflow:
1
Run load tests using 'autocannon'.
2
Take baseline and post-load V8 Heap Snapshots in Chrome DevTools.
3
Search for 'Closure' or 'IncomingMessage' objects retained in memory.
4
Resolution: Never attach request/response references to global singletons without explicit cleanup listeners on 'res.on("finish", ...)'!
Code Implementation Example
javascript
import express from 'express';
const app = express();
const leakyGlobalArray = [];
app.use((req, res, next) => {
// ❌ LEAK: Appending req object to global array retains entire request memory!
// leakyGlobalArray.push(req);
// ✅ FIX: Clean up references when HTTP response completes!
res.on('finish', () => {
// Perform cleanup or record primitive metric values only
const duration = Date.now() - req.startTime;
});
next();
});💡Fixing dangling request object reference memory leaks using res.on("finish").
🎯 Interview Key Takeaway
Use V8 Heap Snapshots to identify retained request objects and clean up event listeners on res.on("finish").
#Memory Leaks#Heap Snapshot#V8#Senior
Back to all Express JS Questions→