K8S的oomkiller
典型现象/特征
- 功能异常,如超时、接口报错
- pod宕机或重启
排查确认步骤
可按照以下证据链进行确认:
- 1.可先通过异常接口定位对应服务,确认服务是否存在宕机或重启现象;
- 2.随后重点查看 K8S 中对应 pod 的事件信息,如果存在
OOMKilled、CrashLoopBackOff等关键信息,可作为触发 K8S OOMKill 的直接证据。
如果上面2条信息都符合,可确认为K8S的oomkiller。但该问题可能由多个其他因素导致,还需进行如下检测:
- 1.接着通过巡检工具或人工检查应用
yaml中的资源配置,确认limit、request等参数是配置不合理,如果存在问题则需调整。 - 2.检测异常服务是否存在生成
heapdump文件,如果存在转入 元空间内存溢出 或 JVM堆内存溢出处理 - 3.检查 K8S 节点监控,确认是否存在节点资源瓶颈,例如内存不足。
- 4.最后结合应用监控判断应用本身的内存、CPU、GC、磁盘等指标是否基本正常,如果应用自身没有明显异常飙高,而 pod 却被系统回收,则更倾向于 K8S 层资源限制或节点资源不足导致。
分析工具
常见应急处理策略
- 首先确认服务资源配置是否合理,避免存在明显偏大或不符合实际负载的资源申请与限制;如果配置不合理,应优先调整 pod 部署配置。
- 如果集群资源分布不均,可选择负载和资源使用率较低的节点,通过增加
nodeSelector或nodeName等方式,将 pod 调度到更合适的节点,缓解节点级资源争抢问题。