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杀死某个业务进程?
- 将进程oom_score_adj的值设置为-1000;
- 关闭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,是微软公司开发的一款文字处理软件,广泛应用于文档编辑、排版、打印等领域。无论是撰写论文、报告、简历…...
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手套凭借精准的动作捕捉技术和导出数据的强大兼容性,在灵巧手的研发和应用中发挥了重要作用。 手部…...
告别Zabbix!轻量级监控神器Netdata在Ubuntu 22.04上的花式玩法
告别Zabbix!轻量级监控神器Netdata在Ubuntu 22.04上的花式玩法 1. 为什么Netdata正在重新定义监控体验 凌晨三点,服务器告警短信惊醒睡梦中的你。手忙脚乱连上VPN,却发现只是Zabbix又一个误报——这样的场景是否似曾相识?传统监控…...
别光看公式了!用Multisim 14.0手把手仿真这8个经典运放电路(附工程文件)
别光看公式了!用Multisim 14.0手把手仿真这8个经典运放电路(附工程文件) 在电子工程的学习过程中,运算放大器(Op-Amp)无疑是一个让人又爱又恨的存在。爱的是它强大的功能和广泛的应用,恨的是那些…...
FreeRTOS中断管理实战:如何用信号量优雅处理硬件中断(附STM32代码)
FreeRTOS中断管理实战:信号量在STM32硬件中断中的高效应用 1. 嵌入式实时系统中的中断挑战 在嵌入式开发中,中断处理就像餐厅里的紧急订单——它可能随时打断主厨正在准备的常规菜品。想象你正在安静地享用下午茶,突然门铃响起(…...
革新性暗黑破坏神2存档管理开源工具:d2s-editor全功能解析
革新性暗黑破坏神2存档管理开源工具:d2s-editor全功能解析 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑破坏神2存档修改门槛高?复杂二进制格式难以操作?d2s-editor作为免费开源的Web端…...
避坑指南:GD32F407移植FATFS到SD卡,这几个STM32老司机常踩的坑你别再跳了
GD32F407 FATFS移植避坑实战:STM32老手最容易忽略的5个硬件差异 从STM32切换到GD32F407的开发者,往往带着"Pin to Pin兼容"的预期开始SD卡文件系统移植,却在调试阶段遭遇各种诡异问题。上周一位资深工程师向我展示了他的调试记录&a…...
Inner-IoU: More Effective Intersection over Union Loss with Auxiliary Bounding Box——基于辅助边界框的更有效交并比损失
这篇题为《Inner-IoU: More Effective Intersection over Union Loss with Auxiliary Bounding Box》的论文,主要研究了目标检测中边界框回归(BBR)损失函数的改进问题。以下是其核心研究内容的全面总结概括: 1. 研究背景与问题 现…...
告别黑盒:手把手教你用GDB调试`ipmitool`源码,亲眼看到RAW数据如何发送
从GDB断点到硬件交互:动态追踪ipmitool RAW命令的全链路实现 在服务器管理领域,IPMI协议如同一位沉默的守护者,通过BMC(基板管理控制器)提供着硬件级的监控与控制能力。而ipmitool作为最流行的IPMI命令行工具ÿ…...
HY-MT1.5-1.8B助力内容本地化:一键翻译33种语言,保留原文格式
HY-MT1.5-1.8B助力内容本地化:一键翻译33种语言,保留原文格式 1. 引言 1.1 多语言翻译的挑战与机遇 在全球化的数字时代,内容本地化已成为企业出海、文化交流和技术传播的关键环节。传统翻译工具往往面临三大痛点:语言覆盖有限…...
《与AI的妄想对话:如何给机器人造灵魂?》
本文为个人想法分享,是一种幻觉创作,只图一乐。 #赛博哲学 #概念艺术 #AI幻想 #科幻微小说提问: 你分析一下下面这段文章里面的harness它的构建原则。我觉得他和我们这个理论里面说的某一些东西我感觉很像好像是这种智能的或者说锚点定义的简…...
OpenClaw × 88API:不用注册 Anthropic,5 分钟让 AI Agent 接入 Claude 4.6(2026 完整教程)
折腾了两天,最后 5 分钟搞定 上周我想用 OpenClaw 搭一个能自动重构代码的 Agent。选定 Claude 4.6 当大脑——毕竟它在 Tool Use 精准度和长上下文推理上确实是第一梯队。 结果卡在了第一步:Anthropic 官方账号注册要海外手机号,好不容易注…...
