Quay lại danh sách case study
Khắc phục lỗi Memory Leak trong ứng dụng Node.js
Phát hiện và xử lý hiện tượng rò rỉ bộ nhớ do lắng nghe sự kiện dư thừa.
Bối cảnh
Một ứng dụng chat thời gian thực dùng Socket.io và Node.js bị tăng dung lượng RAM liên tục sau vài ngày hoạt động và cuối cùng bị crash do tràn bộ nhớ.
Vấn đề cần xử lý
Mỗi khi người dùng kết nối, hệ thống thêm một event listener mới vào sự kiện toàn cục nhưng không bao giờ xóa đi khi họ ngắt kết nối.
Hướng xử lý đề xuất
Sử dụng phương thức removeListener hoặc off khi socket ngắt kết nối để giải phóng vùng nhớ cho các listener cũ.
Câu trả lời mẫu khi phỏng vấn
Em đã sử dụng công cụ giám sát bộ nhớ và phát hiện có quá nhiều listener được gắn vào mà không được gỡ bỏ. Em đã bổ sung lệnh off hoặc removeListener trong sự kiện disconnect của Socket.io để giải quyết triệt để.
Trade-off
Cần cẩn thận khi quản lý vòng đời của các đối tượng kết nối, đôi khi việc dọn dẹp làm code phức tạp thêm một chút.
Kết quả kỳ vọng
Mức sử dụng RAM của server ổn định trở lại, không còn hiện tượng tràn bộ nhớ sau nhiều ngày chạy.
Bài học khi trả lời phỏng vấn
Luôn luôn dọn dẹp các event listener, timer hoặc kết nối database khi không còn sử dụng để tránh rò rỉ bộ nhớ.