当前位置: 首页 > news >正文

K8S OOM killer机制

当kubelet没来得及触发pod驱逐,使得节点内存耗尽时,将触发节点上的OOM killer机制;

Linux上有个机制叫OOM killer(Out Of Memory killer),这个机制会在系统内存耗尽的情况下发挥作用,即根据一定的算法规则,选择性的杀死一些进程,以释放部分内存,让系统继续稳定运行。

如何选择杀死哪个进程

当发生oomkill时,OOM killer给进程打分,得到oom_score,然后优先把oom_score最大的进程先杀死;

oom_score怎么计算获得呢?oom_score=oom_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杀死某个业务进程?

  1. 将进程oom_score_adj的值设置为-1000;
  2. 关闭OOM killer机制;
设置oom_score_adj

在Linux系统中,oom_score_adj是一个文件,其路径通常位于/proc/[pid]/oom_score_adj,其中[pid]是进程的ID。通过修改这个文件,可以调整特定进程的OOM(Out of Memory)killer评分。这个评分影响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系统中,OOM(Out of Memory)killer是一个保护机制,用于在系统内存不足时自动选择并终止消耗内存最多的进程,以防止系统因内存耗尽而完全崩溃。尽管在某些情况下,您可能想要关闭这个机制,但请注意,这样做会增加系统因内存不足而变得不稳定或崩溃的风险。

如果您确实需要临时或永久地关闭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_oom=0来关闭OOM killer。这通常在/etc/default/grub(对于使用GRUB的系统)或相应的启动配置文件中设置。修改后,需要更新GRUB配置并重启系统:

echo 'kernel_param="panic_on_oom=0"' >> /etc/default/grub
update-grub
reboot

注意事项

  • 关闭OOM killer可能会导致系统在内存不足时变得不稳定或无法预测,因为没有任何机制来自动终止进程以释放内存。
  • 在某些情况下,如实时或嵌入式系统,可能需要关闭OOM killer以避免意外的进程终止。
  • 在大多数服务器和桌面环境中,建议保持OOM killer启用,因为它是保护系统免受内存耗尽影响的重要机制。

相关文章:

K8S OOM killer机制

当kubelet没来得及触发pod驱逐,使得节点内存耗尽时,将触发节点上的OOM killer机制; Linux上有个机制叫OOM killer(Out Of Memory killer),这个机制会在系统内存耗尽的情况下发挥作用,即根据一定…...

什么是绩效文化?

绩效文化是一种组织文化,它将绩效视为核心价值观,贯穿于组织的各个层面和活动之中。 一、绩效文化的内涵 目标导向 绩效文化强调组织成员都朝着共同的目标努力。这个目标通常是明确、可衡量的,如企业的年度利润目标、市场份额增长目标等。例…...

【人工智能-CV领域】对抗生成网络(GAN)与扩散模型全面解析与深度融合:实现AI生成能力的新突破

文章目录 了解更多AI内容生成模型概述对抗生成网络(GAN)的深度解析GAN的基本原理GAN的损失函数GAN的优势与挑战 扩散模型(Diffusion Model)的深入探讨扩散模型的基本原理扩散模型的损失函数扩散模型的优势与挑战 GAN与扩散模型的全…...

IT系统运维监控指标体系-持续完善中

分类指标名称定义说明指标类型采集频率统计数据频率计量单位数据精度应用注册用户数统计当前注册用户总数量统计类1分钟分钟、小时、日个整数应用在线用户数统计当前在线用户总数量统计类1分钟分钟、小时、日个整数应用日登录人数统计当日登录用户总数量统计类1分钟分钟、小时、…...

RPC设计--TcpAcceptor

TcpAcceptor 其功能较为简单,把套接字通信的一整套流程封装起来。在构造函数中就创建好连接套接字、设置好端口复用,等待accept,即自己封装socket 、 bind等函数调用 传入本地要监听的地址和端口,完成上述流程。 可提供getList…...

《Python数据分析:活用pandas库》学习笔记Day1:Panda DataFrame基础知识

Python数据分析:活用pandas库 Python强大易用,是数据处理和数据分析利器,而众多库的加持令其如虎添翼。Pandas就是其中一个非常流行的开源库,它可以确保数据的准确性,将数据可视化,还可以高效地操作大型数…...

【Go 基础】并发相关

并发相关 CAS CAS算法(Compare And Swap),是原⼦操作的⼀种,,CAS 算法是⼀种有名的⽆锁算法。⽆锁编程,即不使⽤锁的情况下实现多线程之间的变量同步。可⽤于在多线程编程中实现不被打断的数据交换操作,从…...

数据质量规则(Data Quality Rules)

数据质量规则(Data Quality Rules)是指用来确保数据的准确性、完整性、一致性和可用性的标准或逻辑规则。这些规则通常在数据集成、数据存储和数据分析过程中执行,以保证数据符合预期的业务需求或技术规范。 以下是数据质量规则的分类及其内…...

stm32延时

1. void delay_config(void) {SysTick->CTRL | SysTick_CTRL_CLKSOURCE_Msk; //时钟源为系统时钟168MHzSysTick->LOAD 167; //重载值为168-1,每1us溢出一次 }void delay_ms(u32 nTime) {nTime * 1000;SysTick->CTRL | SysTick_CTRL_ENABLE_Msk; //…...

工作随笔2024,12.9

1.关于connect重复连接,会导致当该信号发出时槽函数会执行对应的次数,所以在添 加init相关名称的函数要查看内部是否有connect,是否会造成重复连接. 2. 建议如果是唯一一个连接的,可以使用uni Que connection这个属性 3. 有关事…...

【PGCCC】 pg_query 6.0:使用 Postgres 自己的解析器解析、反解析和规范化 SQL 查询的 Ruby 库

pg_query 这个 Ruby 扩展使用实际的 PostgreSQL 服务器源来解析 SQL 查询并返回内部 PostgreSQL 解析树。 此外,该扩展允许您规范化查询(用 $n 替换常量值)并将这些规范化的查询再次解析为解析树。 当您构建此扩展时,它会构建 …...

18.Vue 3 + OpenLayers:实现添加全屏显示功能示例

前言 在地图应用中,全屏显示功能可以为用户提供更好的视觉体验和交互感受。本文将带大家实现一个基于 Vue 3 和 OpenLayers 的全屏显示地图功能,适合初学者或开发者快速上手。 项目准备 1. 项目搭建 如果尚未创建 Vue 3 项目,可以通过以下…...

04_掌握Python基础语句

学习完本篇内容,你将掌握以下技能: 掌握 Python 中的基础类型,包括整数、浮点数、布尔值、字符串等。掌握 Python 中的运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符等。掌握 Python 中的语句,包括赋值语句、选择语句、循环语句等。掌握 Python 中的控制流语句…...

iOS如何自定义一个类似UITextView的本文编辑View

对于IOS涉及文本输入常用的两个View是UITextView和UITextField,一个用于复杂文本输入,一个用于简单文本输入,在大多数开发中涉及文本输入的场景使用这两个View能够满足需求。但是对于富文本编辑相关的开发,这两个View就无法满足自…...

【时时三省】(NIT计算机考试)Word的使用方法

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 一、软件简介 Microsoft Word,简称Word,是微软公司开发的一款文字处理软件,广泛应用于文档编辑、排版、打印等领域。无论是撰写论文、报告、简历&#xf…...

openjdk17 jvm加载class文件,解析字段和方法,C++源码展示

##构造方法ClassFileParser,parse_stream解析文件流 ClassFileParser::ClassFileParser(ClassFileStream* stream,Symbol* name,ClassLoaderData* loader_data,const ClassLoadInfo* cl_info,Publicity pub_level,TRAPS) :_stream(stream),_class_name(NULL),_load…...

驱动断链的研究

准备 source insight 从现在开始我们正式进入内核编程,但是很多内核里面的结构和类型是需要我们额外声明的,我们就需要一个工具来快速的阅读WIn内核源码。这里我贴出我所参考的博客 羽夏看Win系统内核——SourceInsight 配置 WRK - 寂静的羽夏 - 博客…...

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型(LLM)和人工智能技术的迅猛发展,开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…...

做题时HashSet、TreeSet、LinkedHashSet的选择

一、HashSet 此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。 代码: import java.util.HashSet; import java.util.LinkedHashSet; import ja…...

Manus手套动作捕捉AI训练灵巧手

随着人工智能(AI)和机器人技术的融合日益紧密,使用真实动作数据AI扩容训练机器人的方式正在被用于开发更富表现力的机器人。Manus手套凭借精准的动作捕捉技术和导出数据的强大兼容性,在灵巧手的研发和应用中发挥了重要作用。 手部…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...