Memory leak (rò rỉ bộ nhớ) là tình trạng ứng dụng chiếm dụng bộ nhớ nhưng không giải phóng, khiến dung lượng RAM tăng dần theo thời gian. Trong Node.js, nếu không xử lý kịp, memory leak có thể dẫn đến:
Nếu bạn vô tình khai báo biến mà không dùng let/const/var, nó sẽ thành global và tồn tại suốt vòng đời ứng dụng.
function test() {leakedVar = "Tôi là biến global!"; } test();
Biến leakedVar ở trên sẽ không bao giờ được GC (Garbage Collector) giải phóng.
Closures tiện lợi, nhưng nếu giữ tham chiếu đến đối tượng lớn mà không còn dùng → memory leak.
function createBigClosure() { const bigArray = new Array(1000000).fill("data"); return () => console.log(bigArray.length); } const closure = createBigClosure(); // bigArray vẫn tồn tại trong bộ nhớ
Nếu bạn đăng ký event nhưng không removeListener, nó sẽ tích lũy theo thời gian.
const EventEmitter = require("events"); const emitter = new EventEmitter(); function onData(data) { console.log(data); } emitter.on("data", onData); // Không bao giờ gọi emitter.removeListener("data", onData)
Dùng cache mà không có cơ chế TTL hoặc max size sẽ khiến bộ nhớ ngày càng phình to.
const cache = {}; function setCache(key, value) { cache[key] = value; }
process.memoryUsage()Node.js cung cấp sẵn API để theo dõi bộ nhớ:
setInterval(() => { const usage = process.memoryUsage(); console.log(`Heap Used: ${Math.round(usage.heapUsed / 1024 / 1024)} MB`); }, 5000);
Nếu heapUsed tăng liên tục và không giảm → có khả năng memory leak.
node --inspect index.jschrome://inspect).Ví dụ với heapdump:
const heapdump = require("heapdump"); setInterval(() => { heapdump.writeSnapshot(`./${Date.now()}.heapsnapshot`); }, 60000);
Sau đó mở file .heapsnapshot bằng Chrome DevTools để phân tích.
✅ Dùng let/const để tránh biến global.
✅ Quản lý event listeners: nhớ gỡ bỏ khi không cần.
✅ Với cache, dùng thư viện hỗ trợ TTL (ví dụ node-cache, lru-cache).
✅ Kiểm soát closures: tránh giữ tham chiếu không cần thiết.
✅ Đặt log giám sát memory trong production.
✅ Dùng PM2 hoặc K8s để tự động restart khi vượt quá giới hạn RAM.
Memory leak trong Node.js không phải lúc nào cũng dễ phát hiện, nhưng nếu bạn:
thì hoàn toàn có thể kiểm soát và tránh được rủi ro gây crash hệ thống.
You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE