Docker OOM处理方式

news2024/12/25 9:53:34

优质博文:IT-BLOG-CN

cicode xxx k8s docker events oom occured告警原因

特别需要注意的是:docker events oom的处理方法不同于java.lang.OutOfMemoryError

当我们在PAAS/Captain上申请容器实例时,会设置内存Limit。比如容器Flavor2C4G,系统为该容器设置的内存limit就是4G。当容器内部进程使用的内存达到4G时,宿主机KernelOOM-Killer会开始工作,杀死当前容器进程。由于K8S具备自愈能力,被杀的进程会被重新拉起,因此用户侧看到的现象可能和应用重启的行为类似。下面来详细说下docker evets oom产生的原因。

Java应用为例:内存占用 = Java Heap(Xmx) + Native Memory

Native Memory中主要包括:
【1】JNI调用,也就是Native Stack,例如jdbcgzip
【2】线程占用内存Xss
【3】DirectByteBuffer常说的Java堆外内存;
【4】管理java heap的状态数据(用于GC);

触发容器OOM的原因就可以从上面几个维度去分析,配合对应的监控指标(JVM Heap,线程数,DirectByteBuffer),以4G容器实例为例,正常情况Xmx3GNative Memory正常需要300M
【1】Xmx设置错误,heap大于3.7G时,整体占用超过4G,处理的方法是设置合理-Xmx -Xms -Xmn
【2】线程数持续增加,线程占用内存超过1G,整体超过4G,处理的方式是检查代码;
【3】DirectByteBuffer超过1G,整体占用超过4G,建议查看堆外预留内存是否设置合理,如果不合理可以通过调整JVM配置来解决;
【4】Native Stack内存占用过大超过1G,例如gzip流未close,整体超过4G,处理的方式是检查代码;

收到docker events oom告警后

第一步需要查看Hickwall上的容器实例监控页面,确认本次docker oom触发的时间。

第二步查看Mem Rss Used图表

以上图为例,容器Mem limit32G,当容器内部进程使用达到32G时、触发了宿主机的OOM-Killer,java进程被杀;当java进程重新自动启动时,内存回落到27G左右。
再拉长7天的时间看到,从4月15日开始,java进程内存使用有持续的增长趋势,在4月19日20:50左右终于达到了32Glimit、触发OOM事件。

第三步:结合上面描述的原因,分析导致OOM产生的条件。
【1】容器JVM参数设置说明:容器镜像里会根据该容器的flavor大小自动提供默认的JVM参数如下

-Xmx${JVM_AGG_MAX_MEM}m \
-Xms${JVM_AGG_MIN_MEM}m \
-Xmn${JVM_NEW_SIZE}m \
-XX:MetaspaceSize=128m \
-XX:MaxMetaspaceSize=256m \
-XX:SoftRefLRUPolicyMSPerMB=0 \
-XX:MaxGCPauseMillis=200 \
-XX:+UseG1GC \
-XX:-OmitStackTraceInFastThrow \

堆外内存预留为RESERVED_MEM默认分配容器内存的20%并且最大是2g,即:RESERVED_MEM = maxmem * 0.2 <= 2g
Xmx最大堆大小:xmx = maxmem - RESERVED_MEM
Xms初始堆大小:xms = xmx
Xmn年轻代大小:xmn = Xmx * 0.6

举个例子:一个2C2G的容器,内存为2G,所以Xmx0.8×2G =1638M

-Xms = 1638M
-Xmn = 983M 

如果觉得默认JVM参数不满足具体需求的话可以通过extraenv来覆盖默认参数,详细参考如下:针对tomcat的应用,PD可以通过这两个文件进行定制化扩展:

名称说明
extraenv.shtomcat启动脚本的扩展,即启动时执行,可以指定jvm启动参数
server.xml1、即tomcatserver.xml 2、pd可以使用自己的server.xml, 配置Connector,指定线程池大小等;3、不能指定端口,端口使用占位符,由发布系统确定端口;

过往处理案例

比较常见的案例如下:
【1】在vm迁移docker的过程中,或者更改docker flavor的过程中没有及时调整自己设置的extraenv。例如,原先的vm4C12G的配置,迁移到docker后配置为2C6G但是extraenv-Xmx -Xms -Xmn配置没更改过来。
【2】代码的bug导致堆外内存打爆。例如,堆内内存使用不多,但是由于代码bug导致线程池缓慢增加,内存不够,也无法GC回收,最后触发OOM

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

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

相关文章

【Nodejs】npm的使用

1.包和npm 1.1 什么是包 由于 Node 是一套轻内核的平台&#xff0c;虽然提供了一系列的内置模块&#xff0c;但是不足以满足开发者的需求&#xff0c;于是乎出现了包&#xff08;package&#xff09;的概念&#xff1a; 与核心模块类似&#xff0c;就是将一些预先设计好的功能…

20.0 HTTP通信

1. web开发 1.1 web开发介绍 Web指的是World Wide Web(万维网), 是一种基于互联网的信息系统. 万维网由一系列通过超文本链接相互连接的页面组成, 这些页面中包含了文本, 图像, 音频, 视频等多媒体内容. 用户可以通过浏览器访问万维网上的网页, 并通过超链接在不同页面之间导…

网页布局元素填充思路 ———— 先布局,再局部

【引言】 今天来分享一下在JS练习项目中学习到的网页布局思路&#xff0c;适合刚接触JS的小白在做练习项目&#xff0c;不知所措的时候看喔~ 简单来说就是 ———— 先布局&#xff0c;再局部。 在初次做练习项目的时候&#xff0c;大多都会先仿照一个网站先进行一个试练&…

商城后台系统的多规格

需要添加多规格,并且还要根据算法生成对应的规格列表 1、获取此规格值数据类型 specsList:[{title: "颜色",specsTag:[蓝色,绿色],},{title: "尺码",specsTag:[165*130,L,XL], }] 2、处理数据 let skuList = []for(const { specsTag } of this.specsLi…

StableDiffusion 换脸实现

先看效果&#xff1a; 想要换的脸&#xff1a; 想要把脸放到的目标图片&#xff1a; 实现方案&#xff1a; StableDiffusionroop&#xff08;本次实验基于roopV0.02版本&#xff09; 1/安装SD&#xff0c;模型选择 DreamShaper,Sampler使用 Euler a 2/安装roop插件 roop插…

adnroid 11. 0 Activity启动流程图解

从Launcher到ActivityTaskManager 从ActivityTaskManagerService 到 ApplicationThread 从ApplicationThread到onCreate

CSS实现文字渐变色

css样式 style"background: linear-gradient(to right, red, #FFA387);-webkit-background-clip: text;color: transparent;"效果

结构型设计模式-1.代理设计模式

结构型设计模式-1.代理设计模式 结构型设计模式&#xff1a;利用类与类之间的关系&#xff08;继承、组合&#xff09;&#xff0c;形成一种类与类之间的结构&#xff0c;通过这种结构提高代码的可拓展性、可维护性和可重用性。 一、简介 代理设计模式&#xff08;Proxy Des…

从零开始制作婚礼策划展示小程序

随着移动互联网的发展&#xff0c;小程序已经成为各行各业展示和推广自己的重要工具之一。对于婚礼策划行业来说&#xff0c;制作一个专属的婚礼策划展示小程序&#xff0c;不仅能提升服务的专业性和便利性&#xff0c;还能吸引更多的客户。下面将介绍从零开始制作婚礼策划展示…

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(系统底层优化篇)

深入探索和分析MySQL数据库的全方位的优化实战开发指南&#xff08;数据库底层优化篇&#xff09; 硬件层面优化数据库物理机分析底层技术优化磁盘性能优化随机IO能力的能力支持 RAID磁盘阵列RAID10RAID10的优势 网卡优化网络设备坑点问题建议 服务器硬件配置调整服务器BIOS调整…

Layout软件中的焊盘的一般命名方法是什么呢?

答&#xff1a;对于不同的焊盘有不同命名方法&#xff0c;这里给大家介绍一下普遍的命名方法&#xff0c;具体如下所示&#xff1a; 贴片类焊盘命名方式&#xff1a; 1&#xff09;圆焊盘circle &#xff1a;SC 直径&#xff0c;如&#xff1a; SC1R00&#xff0c;即直径为1m…

多种语言示例采集数据【淘宝天猫1688拼多多API系列】可高并发线程

长话短说&#xff0c;节约彼此宝贵时间&#xff0c;我们以淘宝商品详情数据为例&#xff1a; 请求方式&#xff1a;HTTPS POST GET 请求地址&#xff1a;https://o0b.cn/anzexi taobao.item_get 公共参数 名称类型必须描述技术交流18179014480keyString是调用key&#xf…

探寻智能化未来:AI与Web3共创金融领域巨大潜力

人工智能&#xff08;AI&#xff09;和Web3技术的迅猛发展为我们带来了许多新的机遇和影响。在数字经济和社会的浪潮中&#xff0c;结合了AI的智能化能力和Web3的去中心化与区块链技术&#xff0c;我们将进入一个智能化的Web3时代。人工智能和Web3技术是开拓生产力极限和重新定…

Docker 数据管理

Docker 数据管理 一、docker数据管理 1.数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现数据在宿主机与容器之间的迁移。…

QT构建套件(Kit)黄色感叹号问题解决

构建套件&#xff08;Kit&#xff09;黄色感叹号问题 1:看下面的图出现了黄色警告&#xff0c;此时这个构建套件 就是不允许使用的 2&#xff1a;查看一下MSVC的dedbug调试器(cdb.exe) 如果没有&#xff0c;我们需要下载cdb.exe cdb.exe下载方法 2.1首先我们可以打开我们系…

【Linux】- 进程管理

进程管理 1.1 基本介绍1.2 显示系统执行的进程1.3 服务(service)管理2.1 chkconfig 指令2.2 动态监控进程2.3 监控网络状态 1.1 基本介绍 在 LINUX 中&#xff0c;每个执行的程序都称为一个进程。每一个进程都分配一个 ID 号(pid,进程号)。>windows > linux每个进程都可…

哪种电容笔比较好用?一般电容笔和Apple pencil区别

和苹果的Pencil不同的是&#xff0c;一般的电容笔并没有具备重力压感&#xff0c;只有一种倾斜的压感。如果你是一个不常用于绘画的用户&#xff0c;那么可以使用一支价格相对实惠的平替电容笔。这款电容笔&#xff0c;既能用在办公中&#xff0c;又能用来做笔记&#xff0c;还…

勘探开发人工智能技术:地震层位解释

1 地震层位解释 层位解释是地震构造解释的重要内容&#xff0c;是根据目标层位的地震反射特征如振幅、相位、形态、连续性、特征组合等信息在地震数据体上进行追踪解释获得地震层位数据的方法。 1.1 地震信号、层位与断层 图1.1 所示为地震信号采集的过程&#xff0c;地面炮…

spring复习:(54)注解配置和xml配置时在bean实例化时的区别

一、使用配置文件定义bean时&#xff0c;会调用无参的构造方法&#xff1a; 而使用ConfigurationBean注解时&#xff0c;在bean定义解析时设置了 factoryBeanName和factoryMethodName 实例化bean时会走如下逻辑&#xff1a; instantiateUsingFactoryMethod方法代码如下&…

怎么学习JavaWeb开发? - 易智编译EaseEditing

学习JavaWeb开发可以按照以下步骤进行&#xff1a; 掌握Java基础&#xff1a; 在学习JavaWeb开发之前&#xff0c;确保你对Java编程语言有一定的掌握&#xff0c;包括面向对象编程、基本语法、数据类型、流程控制等。 学习HTML、CSS和JavaScript&#xff1a; JavaWeb开发主要…