Chạy job batch bị OOM hoài, chắc server thiếu RAM

Job batch chết OOM, DevOps thêm RAM đi!
– Nhưng code load 2 triệu bản ghi một lần, không paging.

Backend blame infra yếu, nhưng audit thấy job batch dùng SELECT * load 2 triệu record vào memory, không paging. DevOps để node chạy đúng, nhưng không set resource limit.

Backend load 2 triệu record mà blame DevOps thiếu RAM!

Phân tích: Ai là thủ phạm?

Backend: Load toàn bộ data, không dùng pagination, gây OOM.  
DevOps: Không đặt resource limit, để pod ngốn memory thoải mái.  
Hệ quả: Job crash, dữ liệu xử lý dở dang, team debug mệt mỏi.

Phân xử

Backend sai vì pattern xử lý kém (7 điểm lỗi). DevOps có lỗi vì không giới hạn resource (3 điểm).

Giải pháp

Backend: Dùng pagination (LIMIT, OFFSET) hoặc stream processing.  
DevOps: Áp dụng LimitRange trong Kubernetes để giới hạn memory.  
Cả hai: Monitor memory usage qua Prometheus.

Ví dụ: Pagination trong SQL:

SELECT * FROM records LIMIT 1000 OFFSET 0;

🎯 Tóm lại: Backend sai pattern xử lý (7 điểm), DevOps thiếu limit (3 điểm). Dùng pagination và LimitRange để job batch không OOM.

Post a Comment

Mới hơn Cũ hơn