云原生之深入解析OOM和CPU节流
一、前言
- 使用 Kubernetes 时,内存不足 (OOM) 错误和 CPU 节流是云应用程序中资源处理的主要难题,这是为什么呢?云应用程序中的 CPU 和内存要求变得越来越重要,因为它们与云成本直接相关。
- 通过 limits 和 requests ,可以配置 pod 应如何分配内存和 CPU 资源,以防止资源匮乏并调整云成本。
-
- 如果节点没有足够的资源, Pod 可能会通过抢占或节点压力被驱当一个进程运行内存不足 (OOM) 时,它会被终止,因为它没有所需的资源;
-
- 如果 CPU 消耗高于实际限制,进程将开始节流,但是,如何主动监控 Kubernetes Pod 到达 OOM 和 CPU 节流的距离有多近?
二、Kubernetes OOM
- Pod 中的每个容器都需要内存才能运行。
- Kubernetes limits 是在 Pod 定义或 Deployment 定义中为每个容器设置的。
- 所有现代 Unix 系统都有一种方法来终止进程,以防它们需要回收内存,这将被标记为错误 137 或 OOMKilled。
State: RunningStarted: Thu, 10 Oct 2019 11:14:13 +0200Last State: TerminatedReason: OOMKilledExit Code: 137Started: Thu, 10 Oct 2019 11:04:03 +0200Finished: Thu, 10 Oct 2019 11:14:11 +0200
- 此退出代码 137 表示该进程使用的内存超过允许的数量,必须终止。这是 Linux 中存在的一个特性,内核 oom_score 为系统中运行的进程设置一个值。此外,它允许设置一个名为 oom_score_adj 的值,Kubernetes 使用该值来允许服务质量。它还具有一个 OOM Killer功能,它将审查进程并终止那些使用比他们应该使用上限更多的内存的进程。
- 请注意,在 Kubernetes 中,进程可以达到以下任何限制:
-
- 在容器上设置的 Kubernetes Limit;
-
- 在命名空间上设置的 Kubernetes ResourceQuota;
-
- 节点的实际内存大小。

三、内存过量使用
- Limits 可以高于 requests,因此所有限制的总和可以高于节点容量,这称为过度使用,这很常见。实际上,如果所有容器使用的内存都比请求的多,它可能会耗尽节点中的内存,这通常会导致一些 pod 被杀死以释放一些内存。
① 监控 Kubernetes OOM
- 在 Prometheus 中使用 node exporter 时,有一个指标称为 node_vmstat_oom_kill,跟踪 OOM 终止发生的时间很重要,但可能希望在此类事件发生之前提前了解此类事件。
- 相反,可以检查进程与 Kubernetes 限制的接近程度:
(sum by (namespace,pod,container)
(rate(container_cpu_usage_seconds_total{container!=""}[5m])) / sum by
(namespace,pod,container)
(kube_pod_container_resource_limits{resource="cpu"})) > 0.8
② Kubernetes CPU 节流
- CPU 节流 是一种行为,当进程即将达到某些资源限制时,进程会变慢。
- 与内存情况类似,这些限制可能是:
-
- 在容器上设置的 Kubernetes Limit。
-
- 在命名空间上设置的 Kubernetes ResourceQuota。
-
- 节点的实际CPU大小。
- 想想下面的类比,我们有一条有一些交通的高速公路,其中:
-
- CPU 就是路。
-
- 车辆代表进程,每个车辆都有不同的大小。
-
- 多条通道代表有多个核心。
- 一个 request 将是一条专用道路,如自行车道。这里的节流表现为交通堵塞,最终,所有进程都会运行,但一切都会变慢。

③ Kubernetes 中的 CPU 进程
- CPU 在 Kubernetes 中使用 shares 处理,每个 CPU 核心被分成 1024 份,然后使用 Linux 内核的 cgroups(控制组)功能在所有运行的进程之间分配。

- 可以处理所有当前进程,则不需要任何操作。如果进程使用超过 100% 的 CPU,那么份额就会到位。与任何 Linux Kernel 一样,Kubernetes 使用 CFS(Completely Fair Scheduler)机制,因此拥有更多份额的进程将获得更多的 CPU 时间。
- 与内存不同,Kubernetes 不会因为节流而杀死 Pod:

- 可以在 /sys/fs/cgroup/cpu/cpu.stat 中查看 CPU 统计信息。
四、CPU 过度使用
- 当想要限制进程的资源消耗时,设置限制或请求很重要。然而,请注意不要将请求总数设置为大于实际 CPU 大小,因为这意味着每个容器都应该有一定数量的 CPU。
- 监控 Kubernetes CPU 节流,可以检查进程与 Kubernetes 限制的接近程度:
(sum by (namespace,pod,container)(rate(container_cpu_usage_seconds_total
{container!=""}[5m])) / sum by (namespace,pod,container)
(kube_pod_container_resource_limits{resource="cpu"})) > 0.8
- 如果想跟踪集群中发生的节流量,cadvisor 提供 container_cpu_cfs_throttled_periods_total 和 container_cpu_cfs_periods_total,有了这两个,就可以轻松计算出所有 CPU 周期的 throttling 百分比。
五、最佳实践
① 注意 limits 和 requests
- 限制是在节点中设置最大资源上限的一种方法,但需要谨慎对待这些限制,因为可能最终会遇到一个进程被限制或终止的情况。
② 做好被驱逐的准备
- 通过设置非常低的请求,可能认为这会为您的进程授予最少的 CPU 或内存。但是 kubelet 会首先驱逐那些使用率高于请求的 Pod,因此将它们标记为第一个被杀死。
- 如果需要保护特定 Pod 免遭抢占(当 kube-scheduler 需要分配新 Pod 时),请为最重要的进程分配优先级。
③ 节流是无声的敌人
- 通过设置不切实际的限制或过度使用,可能没有意识到您的进程正在受到限制,并且性能受到影响。主动监控 CPU 使用率并了解在容器和命名空间中的实际限制。
相关文章:
云原生之深入解析OOM和CPU节流
一、前言 使用 Kubernetes 时,内存不足 (OOM) 错误和 CPU 节流是云应用程序中资源处理的主要难题,这是为什么呢?云应用程序中的 CPU 和内存要求变得越来越重要,因为它们与云成本直接相关。通过 limits 和 requests ,可…...
数据结构与算法之递归: LeetCode 93. 复原 IP 地址 (Typescript版)
复原 IP 地址 https://leetcode.cn/problems/restore-ip-addresses/ 描述 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.…...
json模块与jsonpath详解
数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不…...
ubuntu20.04在noetic下编译orbslam2
ubuntu20.04在noetic下编译orbslam2 参考链接1:https://blog.csdn.net/qq_58869016/article/details/128660588 参考链接2:https://blog.csdn.net/dong123456789e/article/details/129693837 在noetic下的安装环境 1.库安装 sudo apt-get update sudo …...
64. 最小路径和
最小路径和 描述 : 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 题目 : LeetCode 64.最小路径和 64. 最小路径和 解析 : class So…...
惰性加载函数(js的问题)
在web开发中,因为浏览器之间的实现差异,一些嗅探工作总是不可避免。 var addEvent function( elem, type, handler ){if ( window.addEventListener ){return elem.addEventListener( type, handler, false );}if ( window.attachEvent ){return elem.…...
jmeter,读取CSV文件数据的循环控制
1、构造csv数据 保存文件时需要注意文件的编码格式 id,name,limit,status,address,start_time 100,小米100,1000,1,某某会展中心101,2023/8/20 14:20 101,小米101,1001,1,某某会展中心102,2023/8/21 14:20 2、在线程组下添加【CSV数据文件设置】元件 3、CSV文件数据的循环控…...
移植LVGL到像素屏,从此玩转像素屏0门槛
硬件方面 先上渲染图 实物图 配置 主控:esp32 micro32 plus主频:240MhzFlash:8MPSRAM:2M 软件方面 众所周知,LVGL是一个十分优秀的图形框架,小到几百kb的单片机,大到Linux都可以运行。既然它…...
stateflow 之图函数、simulink函数和matlab函数使用及案例分析
目录 前言 1. 图函数graph function 2.simulink function 3.matlab function 4.调用stateflow中的几种函数方式 前言 对于stateflow实际上可以做simulink和matlab的所有任务,可以有matlab的m语言,也可以有simulink的模块,关于几种函数在…...
C# 加载本地文件设置应用程序图标
static class Program{[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Form mainForm new Form1();mainForm.Show();//IntPtr hProcess Process.GetCurrentProcess().MainWindowHandle;// 设置应用程…...
苹果计划将全球1/4的IPhone产能转移至印度
KlipC报道:据相关人士报道,苹果希望在未来2到3年内每年在印度生产超过5000万部iphone,要是该计划得以实现,印度将占领全球iPhone产量的四分之一。 KlipC的分析师Alex Su表示:“此次iPhone15推出是苹果印度制造计划的一…...
el-date-picker 选择一个或多个日期
el-date-picker可选择多个日期 type“dates” 加个s即可 <div><span>el-date-picker选择多个日期</span><el-date-pickertype"dates"v-model"dateList"placeholder"选择一个或多个日期"></el-date-picker></di…...
5个创建在线帮助文档的好方法!
在线帮助文档是企业为用户提供支持服务的重要工具,它能够帮助用户更好地了解和使用产品,提高用户体验。然而,创建一份优秀的在线帮助文档需要掌握一定的技巧和方法。接下来就介绍一下创建在线帮助文档的5个好方法,帮助企业更好地为…...
听GPT 讲Rust源代码--src/tools(14)
File: rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs 在Rust源代码中,rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs这个文件是Rust语言分析器(Rust Analyzer)的一部分,用于处理和管理条件编译指令(Cond…...
arcgis api for js 中使用API的代理页面(跨越配置)
以下仅作为自己阅读官网api的对reques的理解做的备忘笔记。一知半解,仅供参考。 1、获取或者构建第三方代理 官网解释:代理在其自己的 Web 服务器上安装并运行,而不是在 Esri 服务器或安装了 ArcGIS Enterprise 的计算机上安装和运行&#…...
Unity_FairyGUI发布导入Unity编辑器资源报错
Unity_FairyGUI发布导入Unity编辑器资源报错 报错: FairyGUI: settings for Assets/UI/XMUI/XMSubway_atlas0.png is wrong! Correct values are: (Generate Mip Mapsunchecked) UnityEngine.Debug:LogWarning (object) FairyGUI.UIPackage:LoadAtlas (FairyGUI.P…...
1.5【应用开发】缓冲区(二)
二,附加缓冲区 你可以通过分别调用以下函数来附加一个缓冲区(screen_buffer_t类型),以将其与像素图、流或窗口相关联: screen_attach_pixmap_buffer() //用于附加像素图缓冲区 screen_attach_stream_buffers()//用于附加流缓冲区 screen_attach_window_buffers()屏幕附加…...
RTMP流设置超时时间失败
使用FFmpeg(版本是5.0.3)将rtmp流作为输入,设置超时时间(使用-timeout参数),结果报错:Cannot open Connection tcp://XXX:1935?listen&listen_timeout 通过./ffmpeg -help full 命令查看FFmpeg帮助&am…...
如何一步步让MySQL支撑亿级流量
1 主从读写分离 大部分互联网业务都是读多写少,因此优先考虑DB如何支撑更高查询数,首先就需要区分读、写流量,这才方便针对读流量单独扩展,即主从读写分离。 若前端流量突增导致从库负载过高,DBA会优先做个从库扩容上去…...
MFC CLXHHandleEngine动态库-自定义设置对话框使用
实现的效果如下所示: void CSampleDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CSgxMemDialog dlg(180, 100); dlg.SetEnable(true); dlg.SetWindowTitle(_T("自定义对话框")); dlg.AddStatic(1000, //控件资源…...
英矽智能对标宁德时代,AI 制药规模化复制难题待解!
AI 制药巨头“朋友圈”扩大AI 制药巨头的“朋友圈”越来越大了。“港股 AI 制药一哥”英矽智能日前宣布与谷歌云达成战略合作,要把 Gemini 大模型塞进自家 Pharma.AI 平台。这意味着英矽智能已不再满足于做一家“卖算法的”公司,而是要把自己变成药物发现…...
基于Claude API的视频转录技能开发:从语音识别到AI集成实战
1. 项目概述:一个为Claude设计的视频转录技能最近在折腾AI应用开发,特别是围绕Claude API构建一些实用工具。我发现一个挺有意思的项目,叫Johncli7941/claude-skill-video-transcribe。从名字就能看出来,这是一个为Claude设计的“…...
AI智能体信用评分系统:构建可评估、可管理的多智能体协作框架
1. 项目概述:一个为AI智能体设计的信用评分系统最近在折腾AI智能体(Agent)的落地应用时,我遇到了一个挺有意思的问题:当多个智能体协同工作,或者一个智能体需要调用外部工具、API时,如何评估和追…...
Windows下用Python调用CDS API下载ERA5数据,报错Missing/incomplete configuration?手把手教你创建.cdsapirc配置文件
Windows下Python调用CDS API下载ERA5数据报错排查指南:从配置文件创建到隐藏文件陷阱全解析 当你在Windows系统上首次尝试使用Python调用CDS API下载ERA5气象数据时,可能会遇到一个令人困惑的报错:"Missing/incomplete configuration f…...
多尺度地理加权回归(MGWR)终极指南:从入门到实战的完整教程
多尺度地理加权回归(MGWR)终极指南:从入门到实战的完整教程 【免费下载链接】mgwr Multiscale Geographically Weighted Regression (MGWR) 项目地址: https://gitcode.com/gh_mirrors/mg/mgwr 面对复杂多变的空间数据,传统的地理加权回归(GWR)常…...
如何设置Seal视频下载器的智能深色模式:根据时间与系统自动切换
如何设置Seal视频下载器的智能深色模式:根据时间与系统自动切换 【免费下载链接】Seal 🦭 Video/Audio Downloader for Android, based on yt-dlp 项目地址: https://gitcode.com/gh_mirrors/se/Seal Seal是一款基于yt-dlp的Android视频音频下载器…...
ORT Reporter输出格式全解析:生成SPDX、CycloneDX和静态HTML报告的终极指南
ORT Reporter输出格式全解析:生成SPDX、CycloneDX和静态HTML报告的终极指南 【免费下载链接】ort A suite of tools to automate software compliance checks. 项目地址: https://gitcode.com/gh_mirrors/or/ort ORT(Open Source Review Toolkit&…...
STL到STEP格式转换:技术选型与实施指南
STL到STEP格式转换:技术选型与实施指南 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在制造业数字化转型的背景下,3D数据格式互操作性已成为工程团队面临的核心挑战。…...
【Transformer系列】从One-Hot到Embedding:构建AI语言理解的基石
1. 从One-Hot编码说起:AI的第一堂语言课 想象你正在教一个外星人认识汉字。你拿出一本字典说:"这里有10万个字,每个字对应一个编号,猫是第12345号,狗是第67890号。"这就是最原始的One-Hot编码思想——用一串…...
SQL 中 OR 与 UNION ALL选择指南
一句话总结普通小表、无索引场景:用 OR 更简单、代码更短大表、有索引场景:用 UNION ALL 性能远优于 OR需要去重:必须用 UNION(性能比 UNION ALL 差)核心区别只扫描一次表 / 索引数据库需要同时判断两个条件致命问题&a…...
