K8s内存溢出问题剖析之排查与解决过程

 更新时间:2025年07月04日 10:07:57   作者:磐基Stack专业服务团队  
这篇文章主要介绍了K8s内存溢出问题剖析之排查与解决过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、背景

做redis压测过程中,发现paas环境的redis被OOMKill老是不断重启

在这里插入图片描述

Pod日志:

在这里插入图片描述

二、排查方案

1. 可能是数据量超出了限制的大小

检查数据目录大小

2. 查看是否是内存溢出

开始排查

2.1 排查数据量(查看数据目录大小是否超过limit限制)

limit限制为64G 查到数据目录占用很少 忽略此问题

在这里插入图片描述

2.2 查看pod详情发现问题

在这里插入图片描述

为了更准确的定位问题,查看是否是内存泄露问题,查看系统参数(正常是没有输出)

在这里插入图片描述

确定是由于压测导致的Cgroup内存泄露问题

定位原因以后解决问题 :处理内存泄露问题(试了三个方案才得以解决)

三、解决过程

方案一:(修改grub文件)

  • 修改/etc/default/grub 为:
GRUB_CMDLINE_LINUX=“crashkernel=auto net.ifnames=0 biosdevname=0 intel_pstate=disable cgroup.memory=nokmem”

是追加

GRUB_CMDLINE_LINUX=“console=tty0 console=ttyS0 crashkernel=512M-2G:128M,2G:512M rd.lvm.lv=bel/root rhgb quiet cgroup.memory=nokmem” 把 cgroup.memory=nokmem

追加到最后即可

  • 生成配置:
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
  • 重启机器:
reboot
  • 验证:
cat /sys/fs/cgroup/memory/kubepods/burstable/pod*/*/memory.kmem.slabinfo 无输出即可。

x版本cgroup.memory存在bug,docker或其他使用cgroup.memory中kmem功能的应用会造成slab内存泄漏 部分系统可以通过升级到4.x的修复版本来解决,或者通过 cgroup.memory=nokmem 启动项来规避。 部分系统不支持cgroup.memory=nokmem 启动项,可以通过 cgroup_disable=memory 启动项来规避。(此方案解决部分机器,并未全部解决)

方案二:(升级内核、Iaas建议)

由于服务器均为多系统,可以进行此操作

在这里插入图片描述

既然是 3.x 的问题,直接升级内核到 5.x 及以上即可,内核问题解释:

https://github.com/torvalds/linux/commit/d6e0b7fa11862433773d986b5f995ffdf47ce672

https://support.mesosphere.com/s/article/Critical-Issue-KMEM-MSPH-2018-0006

这种方式的缺点是: 需要升级所有节点,节点重启的话已有 pod 肯定要漂移,如果节点规模很大,这个升级操作会很繁琐,业务部门也会有意见,要事先沟通。

这个问题归根结底是软件兼容问题,3.x 自己都说了不成熟,不建议你使用该特性,k8s、docker却 还要开启这个属性。(此方案并不奏效)

方案三:(grubby在线修改内核参数)

查看当前内核版本

在这里插入图片描述

--update-kernel 为当前内核版本文件
grubby --args=cgroup.memory=nokmem --update-kernel=/boot/vmlinuz-3.10.0-1160.el7.x86_64

重启主机 查看系统参数 (显示正常)

在这里插入图片描述

查看pod正常运行

在这里插入图片描述

附加知识点:(内存buff占用清理 -hcache)

wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache
chmod 755 hcache && mv hcache /usr/local/bin/
hcache --top 10

查看内存 free -h

在这里插入图片描述

  • buffers: 用于块设备数据缓冲,记录文件系统metadata(目录,权限,属性等)
  • cached: 用于文件内容的缓冲

分别查看

在这里插入图片描述

清理缓存

仅清除页面缓存(PageCache)

sync; echo 1 > /proc/sys/vm/drop_caches

清除目录项和inode

# sync; echo 2 > /proc/sys/vm/drop_caches

清除页面缓存,目录项和inode

# sync; echo 3 > /proc/sys/vm/drop_caches

清理交换空间:

swapoff -a && swapon -a

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • K8S中若要挂载其他命名空间中的 Secret操作方法

    K8S中若要挂载其他命名空间中的 Secret操作方法

    在Kubernetes中,通过创建ServiceAccount和RoleBinding,可以实现一个命名空间中的Pod挂载另一个命名空间中的Secret,以下是具体步骤和示例代码,包括创建ServiceAccount、Role和RoleBinding,以及在Pod中使用这些资源挂载Secret,感兴趣的朋友一起看看吧
    2025-03-03
  • Kubernetes 权限管理认证鉴权详解

    Kubernetes 权限管理认证鉴权详解

    这篇文章主要为大家介绍了Kubernetes 权限管理认证鉴权详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • kubernetes k8s入门定义一个Pod

    kubernetes k8s入门定义一个Pod

    这篇文章主要为大家介绍了k8s入门定义一个Pod以及破底的定义内容详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多计步,早日升职加薪
    2022-03-03
  • 阿里云kubernetes查找镜像中jar包的方法(docker查看镜像中的jar)

    阿里云kubernetes查找镜像中jar包的方法(docker查看镜像中的jar)

    这篇文章主要给大家介绍了关于阿里云kubernetes查找镜像中jar包的方法,也就是在docker查看镜像中的jar,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • ES业务数据迁移遇到的精度问题BUG

    ES业务数据迁移遇到的精度问题BUG

    这篇文章主要为大家介绍了ES业务数据迁移遇到的BUG精度问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Rainbond使用Dockerfile构建便捷应用运行流程

    Rainbond使用Dockerfile构建便捷应用运行流程

    这篇文章主要为大家介绍了Rainbond使用Dockerfile构建便捷应用运行流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • K8s集群中的DNS服务CoreDNS实战案例详解

    K8s集群中的DNS服务CoreDNS实战案例详解

    在 Kubernetes(K8s)中,DNS 服务是实现服务发现和 Pod 通信的核心组件之一,用于解决集群内资源通过域名而非 IP 地址进行访问的需求,本文将详细解析 K8s DNS 服务的原理、组件、配置及应用场景,感兴趣的朋友一起看看吧
    2025-06-06
  • 基于openEuler的Ceph分布式存储集群部署指南

    基于openEuler的Ceph分布式存储集群部署指南

    本文详细介绍了如何在openEuler22.03LTS操作系统上部署Ceph分布式存储集群,包括环境准备、软件仓库配置、集群初始化、存储节点部署、存储池创建、监控集成和性能优化等步骤,感兴趣的朋友一起看看吧
    2025-03-03
  • K8s内存溢出问题剖析之排查与解决过程

    K8s内存溢出问题剖析之排查与解决过程

    这篇文章主要介绍了K8s内存溢出问题剖析之排查与解决过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • K8s部署Nginx集群,通过Ingress实现HTTPS域名访问过程

    K8s部署Nginx集群,通过Ingress实现HTTPS域名访问过程

    文章主要介绍了如何使用Ingress控制器和Nginx服务来实现HTTP到HTTPS的强制重定向,并解释了Ingress控制器如何处理TLS终止和流量路由,通过配置Ingress和Nginx服务,可以确保所有流量都通过HTTPS访问,从而提高安全性
    2026-01-01

最新评论