Bỏ qua để đến nội dung
Knowledge Hub

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.
Tình huống

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.

OOMKilled mỗi ngày (cả 6 Pod)24
heapUsed tăng mỗi giờ190 MB
p99 giờ cuối trước restart950 ms
Request lỗi 5xx1,6 %

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:  1536Mi

Bạ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.