OOMKilled nghĩa là container vượt resources.limits.memory và bị OOM killer của kernel giết. Dấu hiệu: RESTARTS tăng, describe cho thấy Last State: Terminated, Reason: OOMKilled, Exit Code: 137.
Xác nhận:
kubectl describe pod <name> | grep -A5 "Last State"
kubectl logs <name> --previous # log cua lan chay truoc khi bi gietLog --previous rất quan trọng — log của container hiện tại là của lần restart mới, không chứa manh mối.
Ba nhóm nguyên nhân:
1. Limit đặt quá thấp so với nhu cầu thật. Đo bằng kubectl top pod hoặc metric container memory working set rồi đặt limit theo p99 cộng biên.
2. Runtime không biết limit của container. JVM cũ không tự đọc cgroup limit và đặt heap theo RAM của node → heap lớn hơn limit → OOMKilled. Đặt -XX:MaxRAMPercentage (hoặc --max-old-space-size cho Node.js) cho khớp limit.
3. Rò rỉ bộ nhớ thật — memory tăng đơn điệu theo thời gian rồi chết. Không limit nào cứu được, phải profile heap.
Phân biệt với eviction: OOMKilled là container vượt limit của chính nó; Evicted là node hết tài nguyên và kubelet chọn Pod để loại.