Tình huống: Pod Node.js bị OOMKilled mỗi 6 giờ Trung cấp
Thời gian đọc ước tính: 1 phút
RSS leo dốc đều, Pod chết với exit code 137 mà log không có một dòng lỗi, rồi lặp lại sau 6 giờ. Bạn đi qua bốn quyết định: hành động đầu tiên, đọc heap snapshot, sửa leak và đặt rào chắn để lần sau phát hiện trong vài giờ thay vì hai tuần.
- Chọn sai thì đọc giải thích rồi Chọn lại.
- Điểm chỉ tính lựa chọn đầu tiên ở mỗi bước. Gợi ý: ở bước 2, đọc cột Size Delta và Retainers trước khi đọc warning.
Pod NestJS bị OOMKilled mỗi 6 giờ
Bạn là backend dev của team catalog API (NestJS, Node 24, 6 Pod, memory limit 1536Mi). Mỗi lựa chọn hiển thị ngay hậu quả trên các chỉ số bên dưới.
Bước 1/4 · Exit code 137, không một dòng stack trace
Hai tuần nay, cứ khoảng 6 giờ mỗi Pod lại restart một lần. Đồ thị RSS là một đường dốc đều từ 350 MB lên sát 1,5 GB. Giờ cuối trước mỗi lần restart, p99 từ 180 ms lên gần 1 giây, rồi lỗi 502 khi Pod chết.
kubectl logs --previous chỉ có access log bình thường, dòng cuối không có lỗi gì. Team đề xuất vài hướng.
- exit code
- 137 = 128 + 9 (SIGKILL)
- RSS
- +~200 MB/giờ, không bao giờ giảm
- CPU giờ cuối
- 35% → 80% (phần lớn là GC)
- traffic
- ổn định, không đột biến
$ kubectl describe pod catalog-api-6d8f-x2k9p
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Restart Count: 9
Limits:
memory: 1536MiBạn làm gì?
Chơi xong, đọc Lỗi hiệu năng hay gặp để xem số đo thật của cache Map không giới hạn và listener thêm theo request trên Node 24.