Kubernetes Pod OOMKilled诊断

news2024/10/5 18:30:03

Kubernetes Pod OOMKilled诊断

介绍

  • OOMKilled错误表示容器或pod已被终止,因为它使用的内存多于分配的内存。OOMKilled,通常称为Exit Code 137,是一种源自Linux的错误。OOMOut of Memory Manager)是Linux系统上的一种工具,可以按进程跟踪内存使用情况。如果系统即将耗尽内存,OOM Killer将启动并开始杀死进程,以释放内存并避免崩溃。OOM Killer的目的是通过杀死尽可能少的进程来释放尽可能多的RAM
  • Kubernetes允许pod限制其容器在主机上可以使用的资源量。Pod可以设置内存限制,即容器允许使用的最大内存量,以及内存请求,即容器应该消耗的最小内存量。

Kubernetes存在两种导致Pod OOMKilled的场景:

  • Container Limit Reached

    • 如果容器使用的内存超过其内存限制,则容器将以OOMKilled状态终止。
  • Limit Overcommit

    • 如果所有容器或节点上所有Pod的总内存使用量超过某个阈值,则可能会终止一个或多个Pod

OOMKilled:Container Limit Reached

  • 这是迄今为止在 pod中可能发生的最基本的内存错误。与 Limit Overcommit错误会影响节点上的 RAM 总量不同,如果正常达到 Container Limit,它只会影响一个 pod。当 Kubernetes 发现一个 pod使用的内存超过了配置的限制时(即超过了资源申请的Limit),该 pod 将被杀死并显示错误OOMKilled — Container Limit Reached
  • 在大多数情况下,这会导致容器死亡,一个 Pod变得不健康,并且 Kubernetes 重新启动该 Pod。发生这种情况时,请查看应用程序日志以了解为什么 pod 使用的内存超出了预期。这可能是由于各种因素造成的,包括流量增加或长期运行的 Kubernetes 任务使用了比平时更多的内存。
  • 如果在整个查询过程中发现程序按预期运行但只需要额外的内存来执行,可能需要增加请求和限制值。
  • 额外补充一点,Kubernetes中的livenessProbe如果探活失败也会触发Pod被杀死。

OOMKilled:Limit Overcommit

  • pod 限制的总和大于节点上的可用内存时,可能会发生OOMKilled : Limit Overcommit错误。 Kubernetes 不会分配需要比节点可用 RAM更多的 pod。另一方面,Limit可能高于Request。因此,所有Limit的总和可能超过节点容量。这被称为Limit Overcommit(过度承诺),即超卖,这是一种非常常见的情况。
  • 实际上,如果所有容器消耗的内存都比Request的多,那么节点的内存就会被耗尽。释放一些内存经常会导致一些 pod死亡。 所以一个拥有 8 GB 内存的节点,Kubernetes可能会运行 8 个容器,内存Request值为 1 GB。如果这些容器的内存Limit为 1.5 GB,则某些 pod 的使用量可能会超过最小值,从而导致节点内存不足并强制杀死某些pod

诊断

  • 通过kubectl describe pod [name]可以查看pod死亡的具体原因。

  • 在这里插入图片描述

  • 查看 pod的最近历史事件,并尝试找出触发 OOMKilled错误的原因,因为只有两个常见原因:

    • 由于容器 限制,该 pod已终止。
    • pod由于节点上的过度使用而终止。

解决

如果 Pod 由于容器限制而终止

  • 检查您的应用程序是否真的需要更多内存。如果应用程序面临增加的负载,它可能需要比最初提供的更多的内存。在这种情况下,请在 pod 规范中增加容器的内存限制以纠正错误。 如果内存使用量意外增加并且似乎与应用程序需求无关,则应用程序可能会遇到内存泄漏。在这种情况下,调试应用程序并找到内存泄漏的来源。增加应用程序中的内存限制将消耗更多资源。

如果 Pod 因节点过度使用而终止

  • 如果Pod的内存请求值小于节点上可用的内存,则允许 Pod在节点上调度,这可能导致过度使用。您需要确定Kubernetes为何杀死 pod,然后调整限制值和内存请求以确保节点没有过度使用。
  • 您需要持续监控您的环境,了解 pod 和容器的内存行为,并检查您的设置以全面诊断和解决 Kubernetes内存问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Flutter】多语言方案二:GetX 版

介绍 多语言方案:GetX版,需要手动自定义字符串引用常量,优点不需要自己管理状态。 目录 介绍运行效果一、安装 GetX二、使用1.语言配置 在lib/core下创建一个language文件夹,文件夹下创建一个local.dart文件2.language文件夹下创…

网络行为分析与异常检测

构建防火墙和使用简单的安全解决方案不足以保护网络免受网络异常或攻击,因为DDoS攻击、未知恶意软件和其他安全威胁一直在上升,改变了网络安全格局。网络管理员必须积极主动地分析网络,获得对网络的完全控制,并全面了解网络流量活…

数据可视化(六):Pandas爬取NBA球队排名、爬取历年中国人口数据、爬取中国大学排名、爬取sina股票数据、绘制精美函数图像

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

Docker Compose 的安装和使用详解

Docker Compose 是 Docker 官方开源的容器编排(Orchestration)项目之一,用于快速部署分布式应用。本文将介绍 Docker Compose 的基本概念、安装流程及使用方法。 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,Docker C…

【AI自媒体制作】【AI工具】Midjourney中文站

Midjourney Midjourney中文站, MJ中文站 - 专业AI绘图网站 广场 绘画广场: 包含大量其他用户生成好的图片,可以自由保存。 视频广场: 普通用户目前只支持查看,无法下载 画夹广场: 有很多免费的画夹,比…

对接浦发银行支付(五)-- 主动查询支付结果

一、背景 上一篇我们介绍了支付回调接口的对接情况,当回调出现网络等异常情况,导致用户的支付订单未及时处理或处理失败的时候,商户则需要自己主动向浦发银行发起查询支付结果。 主动查询支付结果,发挥补偿重试的重要作用&#x…

自然语言处理基础面试

文章目录 TF-IDFbag-of-wordsBert 讲道理肯定还得有Transformer,我这边先放着,以后再加吧。 TF-IDF TF(全称TermFrequency),中文含义词频,简单理解就是关键词出现在网页当中的频次。 IDF(全称…

C语言实现贪吃蛇项目(2)

先来看看效果: 20240420_212115 文章目录: 3.项目实现3.0宽字符的打印3.01本地化操作setlocale函数宽字符的打印 3.1贪吃蛇结构的创建和维护3.11贪吃蛇结构的创建3.12贪吃蛇的维护 3.2初始化游戏3.21.打印欢迎界面、隐藏光标和设置窗口大小3.22.绘制地图…

java中File类和输入输出流的用法

目录 针对文件系统进行操作 针对文件内容进行操作 java针对文件操作可以分为两种:1)针对文件系统进行操作,如创建文件,删除文件,创建目录,重命名文件等。 2)针对文件内容进行操作&#xff0c…

SQLite R*Tree 模块(三十三)

返回:SQLite—系列文章目录 上一篇:SQLite FTS3 和 FTS4 扩展(三十二) 下一篇:SQLite轻量级会话扩展(三十四) 1. 概述 R-Tree 是一个特殊的 专为执行范围查询而设计的索引。R-树最常见的是 用于地理空间系统,其中…

第 2 章:FFmpeg简介

2.1 历史 历史 一些相关术语介绍: 容器(Container)格式:一种文件封装格式,里边主要包含了流,一般会使用一个特定的后缀名标识,例如.mov、.avi、.wav等。流 (Stream)&am…

稀碎从零算法笔记Day54-LeetCode:39. 组合总和

题型:数组、树、DFS、回溯 链接:39. 组合总和 - 力扣(LeetCode) 来源:LeetCode 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数…

Tomcat核心组件深度解析

Server组件 Service组件 连接器Connector组件 容器Container组件

C语言系列文章 | 初识C语言

首先分为几个方面来和各位读者介绍C语言,并在之后的学习过程中不断地和各位读者去分享我学习的经历。 坐好,发车咯~目录如下:1. C语言是什么?2. C语言的历史和辉煌3. 编译器的选择VS20224. VS项目和源⽂件、头⽂件介绍5. 第⼀…

前端css中table表格的属性使用

前端css中table表格的属性使用 一、前言二、常见的表格属性1.边框的样式2.布局和对齐3.间距和填充4.背景和颜色5.字体的样式6.边框的圆角 三、简单的表格,例子11.源码12.源码1效果截图 四、给表格添加动画效果,例子21.源码22.源码2的运行效果 五、结语六…

Vue 指令、计算属性、侦听器

目录 指令 指令修饰符 按键修饰符 ​编辑 v-model修饰符 事件修饰符 v-bind对于样式操作的增强 操作class 对象 数组 操作style v-model应用于其他表单元素 computed计算属性 概念 基础语法 ​编辑 计算属性vs方法 computed计算属性 作用 语法 缓存特性 m…

图像处理的魔法师:Pillow 库探秘

文章目录 图像处理的魔法师:Pillow 库探秘第一部分:背景介绍第二部分:库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解…

Unity射击游戏开发教程:(2)实例化和销毁游戏对象

现在我们有了“飞船”,我们可以在屏幕上移动它,现在我们需要发射一些激光!与宇宙飞船一样,我们将让事情变得简单并使用 Unity 自己的基本形状。舱体的效果很好,所以我们来创建一个。 我们保存了有关位置、旋转和缩放的信息。我们想要缩小这个对象,假设每个轴上缩小到 0.2…

使用PHP开发体育赛事直播平台,有这些缺点和优点

"东莞梦幻网络科技"作为体育直播平台开发领域的领导者,选择使用PHP开发体育赛事直播平台的现成源码,为什么会选择该语言,背后的选择理由可以从该技术的优点和缺点中找到答案。 一、优点1、易学易用与快速开发:PHP语言语…

git远程分支强制覆盖本地分支

目录 第一章、问题1.1)报错提示:没有为分支主机或分支配置被跟踪的分支1.2)报错分析与解决 第二章、2.1)本地误删代码后想要git pull拉取覆盖:失败2.2)报错分析和解决 友情提醒: 先看文章目录,…