Kubernetes集群Pod内存泄露问题分析和解决

news/2024/11/22 8:01:15/

在Kubernetes集群中,有时会遇到Pod无法正常创建或被杀掉的情况,describe Pod时显示"no allocated memory"。这种情况很可能是由于节点内存泄露导致的。本文将分析内存泄露的原因,并给出解决方案。

问题现象

  1. Pod状态异常,describe pod显示原因为:no allocated memory
  2. 节点上执行dmesg有日志显示:slub无法分配内存:SLUB: Unable to allocate memory on node -1
  3. 节点oom开始按优先级杀进程,有可能会导致有些正常Pod被杀掉
  4. 机器free查看可用内存还有很多,却无法分配,怀疑是内存泄露
    © ivwdcwso (ID: u012172506)

原因分析

cgroup的kmem account特性在3.x内核上有内存泄露问题,如果开启了kmem account特性会导致可分配内存越来越少,直到无法创建新Pod或节点异常。

几点解释:

  1. kmem account是cgroup的一个扩展,全称CONFIG_MEMCG_KMEM,属于机器默认配置,本身没啥问题,只是该特性在3.10的内核上存在漏洞有内存泄露问题,4.x的内核修复了这个问题。

  2. 因为kmem account是cgroup的扩展能力,因此runc、docker、k8s层面也进行了该功能的支持,即默认都打开了kmem属


http://www.ppmy.cn/news/1548982.html

相关文章

代码随想录1016-Day16

目录 530.二叉搜索树的最小绝对差501.二叉搜索树中的众数105.从中序与前序遍历序列构造二叉树总结 收获 530.二叉搜索树的最小绝对差 文章链接:代码随想录 题目链接:题目 思路:用中序遍历遍历一遍 BST 的所有节点得到有序结果,然后在遍历过程…

持续集成与持续部署:CI/CD实现教程

以下是一个基于常见工具实现 CI/CD 的基本教程示例,这里以 Git、Jenkins、Maven(用于 Java 项目构建和管理依赖,其他语言项目可替换为对应构建工具)以及 Docker(用于容器化部署,非必需但很常用)…

如何提取视频里的音乐?视频音频提取指南

在如今的数字时代,视频与音乐的结合为我们带来了丰富多彩的视听体验。有时候,我们会被视频中的某段背景音乐深深吸引,想要将其提取出来单独欣赏或用于其他创作。 那么,如何提取视频里的音乐呢?本文将为大家介绍几种简…

数据结构-二叉树_堆

目录 1.二叉树的概念 ​编辑1.1树的概念与结构 1.2树的相关语 1.3 树的表示 2. ⼆叉树 2.1 概念与结构 2.2 特殊的⼆叉树 2.2.2 完全⼆叉树 2.3 ⼆叉树存储结构 2.3.1 顺序结构 2.3.2 链式结构 3. 实现顺序结构⼆叉树 3.2 堆的实现 3.2.2 向下调整算法 1.二叉树的概…

使用 Go 实现将任何网页转化为 PDF

在许多应用场景中,可能需要将网页内容转化为 PDF 格式,比如保存网页内容、生成报告、或者创建网站截图。使用 Go 编程语言,结合一些现有的库,可以非常方便地实现这一功能。本文将带你一步一步地介绍如何使用 Go 语言将任何网页转换…

【初阶数据结构与算法】线性表之队列的定义与实现

文章目录 一、队列的概念与结构1. 概念2.队列结构定义 二、队列的实现1.队列的初始化和销毁初始化销毁 2.队列的节点申请和入队列操作队列的节点申请入队列 3.队列的判空和出队列操作队列的判空出队列 4.取队头和队尾元素取队头元素取队尾元素 5.获取队列有效节点个数 三、队列…

【MogDB】MogDB5.2.0重磅发布第八篇-支持PLSQL编译全局缓存

前言 在我之前的文章中有提过,原生PG对于重度存储过程的应用系统适配,具有一个致命缺陷,即原生PG中的plsql是会话级缓存,这意味着每个会话在第一次执行某个存储过程时,都需要对这个存储过程进行编译,并且将…

.NET9 - 新功能体验(一)

被微软形容为“迄今为止最高效、最现代、最安全、最智能、性能最高的.NET版本”——.NET 9已经发布有一周了,今天想和大家一起体验一下新功能。 此次.NET 9在性能、安全性和功能等方面进行了大量改进,包含了数千项的修改,今天主要和大家一起体…