分析Kubernetes pod OOMKilled

use*_*026 5 kubernetes

我们的K8s吊舱上有OOMKilled活动.我们希望在这样的事件的情况下,在pod被驱逐之前运行本机内存分析命令.是否可以添加这样的钩子?

更具体:我们使用-XX:NativeMemoryTracking=summaryJVM标志运行.我们想要jcmd <pid> VM.native_memory summary.diff在pod驱逐之前运行以查看导致OOM的原因.

Ant*_*nko 8

看起来几乎不可能处理.

基于对Github回答,关于优雅地停止OMM杀戮:

目前无法更改OOM行为.当容器接近其内存限制时,Kubernetes(或运行时)可以为容器提供信号.尽管因为内存峰值可能无法按时处理,但这将是尽力而为的.

这是来自官方文件:

如果节点在kubelet能够回收内存之前遇到系统OOM(内存不足)事件,则该节点依赖于oom_killer进行响应.kubelet根据Pod的服务质量为每个容器设置oom_score_adj值.

所以,正如你所理解的那样,你没有太多机会以某种方式处理它.这是关于OOM处理的大文章,我将在这里只介绍一小部分关于内存控制器的内存处理:

不幸的是,这个过程可能没有太多其他方法来响应OOM情况.如果它已使用mlock()或mlockall()将其文本锁定到内存中,或者它已经驻留在内存中,则它现在知道内存控制器内存不足.但是,它无法做任何其他事情,因为大多数感兴趣的操作都需要分配更多内存.

我唯一可以提供的是从cAdvisor获取数据(这里你可以获得一个OOM Killer事件)或者从Kubernetes API获取数据并在你看到非常接近内存的指标时运行你的命令.在您获得OOM Killer活动后,我不确定您是否有时间做某事.