首页/云/云与容器速查/K8s OOMKilled 排查

K8s OOMKilled 排查

容器内存超过 limit 被内核杀死:状态里 reason=OOMKilled、退出码 137。和 Docker 一致:先确认 limit 与真实用量,再区分配置问题与应用内存增长。

云与容器速查云更新于 2026-10-12
确认kubectl get pod -o jsonpath 取 lastState.terminated.reason
对比limits.memory vs kubectl top/监控峰值
节点侧节点内存压力也可能杀:查 dmesg 与 kubelet 事件
常见修正调大 limit、修内存泄漏、控制缓存与并发
预防requests≈limits、压测与内存告警

排查命令

排查命令
kubectl get pod web-1 -o jsonpath='{.status.containerStatuses[0].lastState}'
kubectl top pod web-1
kubectl describe pod web-1 | grep -i oom
kubectl describe node node-1 | grep -i memory | head
只把 limit 调大:应用增长曲线没变,早晚再次撞墙;上线前按峰值内存的 1.3-1.5 倍设限更稳。

易错点

  • limits 完全不设:内存无界,节点先 OOM,波及所有业务
  • Java 只看 -Xmx:堆外/元空间/线程栈加起来可能远超 limit

数据来源与参考

  • Kubernetes Docs:Resource Management
  • Kubernetes Docs:Pod QoS

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌