合肥响应式网站设计,新乡市工程建设信息网,萍乡做网站哪家好,中建八局一公司董事长当kubelet没来得及触发pod驱逐#xff0c;使得节点内存耗尽时#xff0c;将触发节点上的OOM killer机制#xff1b;
Linux上有个机制叫OOM killer#xff08;Out Of Memory killer#xff09;#xff0c;这个机制会在系统内存耗尽的情况下发挥作用#xff0c;即根据一定…当kubelet没来得及触发pod驱逐使得节点内存耗尽时将触发节点上的OOM killer机制
Linux上有个机制叫OOM killerOut Of Memory killer这个机制会在系统内存耗尽的情况下发挥作用即根据一定的算法规则选择性的杀死一些进程以释放部分内存让系统继续稳定运行。
如何选择杀死哪个进程
当发生oomkill时OOM killer给进程打分得到oom_score然后优先把oom_score最大的进程先杀死
oom_score怎么计算获得呢oom_scoreoom_score_adj进程内存占用大小
而oom_score_adj则是可以人工给每个进程设置的从而让用户通过设置进程的oom_score_adj值来影响OOM killer杀死进程的选择
当oom_score_adj的值设置为-1000时表示该进程将不会被OOM killer杀死但如果设置的值不是-1000那这个进程还是会参与打分会受oom_score_adj以及进程内存占用大小的影响需要注意的是即使oom_score_adj的值设置的很小比如-999但当你的进程占用内存很大时该进程同样有很大的概率会被杀死
pod中容器进程的oom_score_adj
对于Guaranteed级别的pod其oom_score_adj的值被设置为-998对于Best-Effort级别的pod其oom_score_adj的值被设置为1000对于Burstable级别的pod其oom_score_adj的取值为2到999
怎么避免OOM Killer杀死某个业务进程
将进程oom_score_adj的值设置为-1000关闭OOM killer机制
设置oom_score_adj
在Linux系统中oom_score_adj是一个文件其路径通常位于/proc/[pid]/oom_score_adj其中[pid]是进程的ID。通过修改这个文件可以调整特定进程的OOMOut of Memorykiller评分。这个评分影响OOM killer在选择哪个进程杀死时的决策。oom_score_adj的值范围从-1000到1000负值会降低进程被OOM killer选中的概率而正值则会增加。
在Kubernetes环境中通常不需要手动设置oom_score_adj因为kubelet会自动为容器设置适当的值基于Pod的QoS服务质量等级。但是如果你需要手动设置或调整容器内进程的oom_score_adj值可以通过以下方法
1. 直接在容器内设置
如果你有权限访问容器内部可以直接在容器内修改oom_score_adj文件。例如要为容器内的某个进程设置oom_score_adj值为500可以执行以下命令
echo 500 /proc/[pid]/oom_score_adj
替换[pid]为实际的进程ID。
2. 使用Security Context设置
在Kubernetes中可以通过Pod的Security Context来设置特定的安全选项包括oom_score_adj。以下是一个示例展示如何在Pod定义中设置oom_score_adj
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:securityContext:oomScoreAdj: 500containers:- name: mycontainerimage: myimage
在这个示例中oomScoreAdj设置为500这将应用于Pod内的所有容器。
3. 使用Node Feature Discovery
对于更复杂的场景比如需要根据节点特性动态设置oom_score_adj可以使用Node Feature Discovery项目。这个项目可以帮助你根据节点的硬件特性来设置特定的参数。 注意事项 修改oom_score_adj可能会影响系统的稳定性因为过高的值会增加进程被OOM killer选中的风险。在生产环境中建议谨慎使用并充分测试以确保不会对系统稳定性造成负面影响。Kubernetes的自动oom_score_adj设置是基于Pod的QoS等级的通常不需要手动干预。 关闭OOM killer机制
在Linux系统中OOMOut of Memorykiller是一个保护机制用于在系统内存不足时自动选择并终止消耗内存最多的进程以防止系统因内存耗尽而完全崩溃。尽管在某些情况下您可能想要关闭这个机制但请注意这样做会增加系统因内存不足而变得不稳定或崩溃的风险。
如果您确实需要临时或永久地关闭OOM killer可以通过以下方法
1. 临时关闭OOM killer
可以通过向/proc/sys/vm/panic_on_oom文件写入值0来临时关闭OOM killer
echo 0 /proc/sys/vm/panic_on_oom
这个设置在系统重启后会恢复默认值。
2. 永久关闭OOM killer
要永久关闭OOM killer您需要编辑/etc/sysctl.conf文件或对应的发行版配置文件并添加或修改以下行
vm.panic_on_oom 0
然后应用更改
sysctl -p
这将使更改永久生效即使在系统重启后。
3. 通过启动参数关闭
也可以在Linux内核启动参数中添加panic_on_oom0来关闭OOM killer。这通常在/etc/default/grub对于使用GRUB的系统或相应的启动配置文件中设置。修改后需要更新GRUB配置并重启系统
echo kernel_parampanic_on_oom0 /etc/default/grub
update-grub
reboot 注意事项 关闭OOM killer可能会导致系统在内存不足时变得不稳定或无法预测因为没有任何机制来自动终止进程以释放内存。在某些情况下如实时或嵌入式系统可能需要关闭OOM killer以避免意外的进程终止。在大多数服务器和桌面环境中建议保持OOM killer启用因为它是保护系统免受内存耗尽影响的重要机制。