CodeReady
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ớ.