Nhảy đến nội dung

Xử lý sự cố Memory Leak trong Backend API

Submitted by admin on

Hiện tượng: API hoạt động hoàn hảo sau khi deploy, nhưng sau khoảng 6 giờ, dung lượng bộ nhớ (memory) tăng vọt lên 95%. Khởi động lại server chỉ khắc phục được tạm thời.

Nguyên nhân cốt lõi: Ứng dụng bị rò rỉ bộ nhớ (Memory Leak) hoặc nghẽn tài nguyên do cấp phát bộ nhớ liên tục nhưng không được giải phóng hay thu gom rác (Garbage Collection).

Các bước điều tra & chẩn đoán

  1. Thu thập dữ liệu (Metrics & APM): Kiểm tra các công cụ giám sát để xem lượng RAM tăng có đồng bộ với một endpoint cụ thể, traffic spike hay background job nào không.
  2. Chụp Heap Dump: Lấy heap dump khi RAM chạm ngưỡng cao (95%) và so sánh với bản snapshot thời điểm vừa khởi động để tìm các object tăng trưởng bất thường về số lượng/kích thước.
  3. Profiling: Chạy công cụ profiler chuyên dụng của ngôn ngữ (pprof, node heap snapshot, Java Flight Recorder...) để truy vết hàm hoặc module đang giữ tham chiếu.

Các thủ phạm phổ biến cần kiểm tra

  • Unbounded Caches: Cache trong bộ nhớ không có giới hạn kích thước (Max size) hoặc thời gian sống (TTL).
  • Event Listeners: Đăng ký lắng nghe sự kiện nhưng quên hủy (unsubcribe) sau khi dùng.
  • Connection Pools: Kết nối database hoặc HTTP client không được đóng đúng cách.
  • Global Variables / Singletons: Lưu trữ trạng thái tích lũy vô thời hạn qua các request.
  • Background Workers: Hàng đợi xử lý công việc chậm hơn tốc độ đẩy task vào, khiến queue phình to trong RAM.
Quy trình từng bước điều tra và khắc phục sự cố rò rỉ bộ nhớ (Memory Leak) khiến RAM tăng vọt lên 95% sau 6 giờ hoạt động trong các ứng dụng Backend.
Subscribe to Node.js