首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kubernetes Pod OOM 排查日记

一、发现问题 在一次系统上线后,我们发现某几个节点在长时间运行后会出现内存持续飙升的问题,导致的结果就是Kubernetes集群的这个节点会把所在的Pod进行驱逐OOM;如果调度到同样问题的节点上,也会出现...Pod一直起不来的问题。...我们尝试了杀死Pod后手动调度的办法(label),当然也可以排除调度节点。...三、Pod频繁重启 有的业务服务,业务量小,自然也就没有调整容器限额,因此得不到内存资源,又超过额度,就会进入疯狂的重启怪圈: ? 重启将近 200 次,告警通知已经爆炸!...而从服务提供的角度来讲,我们并不知道这类服务会在什么地方出现又何时会成长起来,因此我们需要主动去控制容器的 OOM,让其实现优雅退出,保证业务稳定和可控。

2.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

2017最不受欢迎编程语言榜,PHP上榜

01 最不受欢迎的编程语言 在 Stack Overflow 上,开发者可以创建属于自己的“Developer Story”,用来记录项目开发、获得的成就等个人开发经验,相当于简历,待发布之后也可以提升职场机遇...Stack Overflow 使用 Bayes 方法来预估这些平均值,最终发现开发者中最不受欢迎的语言前三名分别为 Perl、Delphi 和 VBA,紧随其后的是 PHP、Objective-C、Coffee...如果此前看过有关 Stack Overflow 的编程语言报告,就会发现,那些很少被标记为不受欢迎的编程语言往往就是使用率快速增长的语言。...下面我们可以通过比较每种语言的增长与标记“dislike”的百分比进行验证,橙色点表示最不受欢迎的语言。以下我们将统计数据限制在发达国家(如美国、英国、德国和加拿大)。 ?...一种可能性是,如果人们感觉到语言已经越来越受欢迎,就会很乐意公开表达自己的喜欢与不喜欢;另一种原因就是与时俱进,以新的更新替换旧而复杂的编程语言。

1.2K110

JVM参数配置及调优

可以通过设置-Xmx来限制JVM堆大小,但该方式存在以下问题: 当规格大小调整后,需要重新设置堆大小参数。 当参数设置不合理时,会出现应用堆大小未达到阈值但容器OOM被强制关闭的情况。...应用程序出现OOM问题时,会触发Linux内核的OOM Killer机制。该机制能够监控占用过大内存,尤其是瞬间消耗大量内存的进程,然后它会强制关闭某项进程以腾出内存留给系统,避免系统立刻崩溃。...-Xloggc:/home/admin/nas/gc-${POD_IP}-$(date '+%s').log GC日志文件路径。...-XX:HeapDumpPath=/home/admin/nas/dump-${POD_IP}-$(date '+%s').hprof DUMP文件路径。...建议与-Xmx相同,避免每次垃圾回收完成后JVM重新分配内存。 -Xmx 设置JVM最大可用内存大小。为避免容器OOM,请为系统预留足够的内存大小。

2.6K31

解读 Java 云原生实践中的内存问题(必看)

Java 凭借着自身活跃的开源社区和完善的生态优势,在过去的二十几年一直是最受欢迎的编程语言之一。步入云原生时代,蓬勃发展的云原生技术释放云计算红利,推动业务进行云原生化改造,加速企业数字化转型。...为什么堆内存未超过 Xmx 却发生了 OOM?怎么理解操作系统和JVM的内存关系?为什么程序占用的内存比 Xmx 大不少,内存都用在哪儿了?为什么线上容器内的程序内存需求更大?...02 为什么堆内存未超过 Xmx 却发生了 OOM?...Xmx,并且配置了 OOM 自动 heapdump 参数之后,发生 OOM 时却没有产生 dump 文件。...Xmx 一样大小,然后悲催地发现容器被 OOM 了。

35120

Kubernetes 集群规模杂谈

requests 是个用于调度的定义,Kubernetes 根据这个要求来选择能够满足要求的节点来分配应用;而 limits 则会用于触发 OOM。...如果无法直接升级,那么就有必要设置 xmx 和 xms 参数了,这里有几个小建议: xmx 和 xms,request 和 limits 建议设成一致,能省掉很多麻烦。...JVM 并不是唯一的内存消耗者,一般建议 Limit 大于 XMX 25% 以上。 /sys/fs/cgroup/memory/memory.stat 是你的好朋友。...Memory 是非弹性资源,如果容器使用 Memory 达到 Limit,就会触发 cgroup 的 OOM 事件,导致容器被杀死。...答案很显然是否定的: 不设置 Limit,一旦引发系统 OOM 或者驱逐事件,宏观来看,都会导致一个不可预知的结果。

91430

一次关于k8s kubectl top 和 contained ps 不一致的问题探究

再后面,出过几次OOM的问题,普遍增加了容器限额 Limits,出现了好几个业务服务是内存小怪兽,因此如果不限制的话,服务过度占用会导致驱逐,因此反馈语也就变成了:“为什么你们的服务内存占用这么高,老被...OOM Kill,赶紧查”。...500m" memory: "512Mi" 建议2 针对应用本身也需要加上资源使用限制,例如 Java 程序可以限制堆内存和非堆内存的使用: 堆内存分配: JVM 最大分配的内存由**-Xmx...** 指定,默认是物理内存的 1/4; JVM 初始分配的内存由**-Xms** 指定,默认是物理内存的 1/64; 默认空余堆内存小于 40% 时,JVM 就会增大堆直到-Xmx 的最大限制;空余堆内存大于...70% 时,JVM 会减少堆直到 -Xms 的最小限制; 因此,服务器的推荐设置是:-Xms、-Xmx 相等以避免在每次 GC 后调整堆的大小。

3K41

FinOps 时代如何玩转应用资源配置

Pod终止的风险(OOM Killer) 会限制Pod的CPU使用,如果实际业务压力超过Limit,会导致CPU throttling和性能下降 会限制Pod的Memory使用,如果实际业务压力超过Limit...,会触发OOM Killer杀死进程 过少的Pod会带来过高的利用率,引发诸如性能下降,OOM Killer等稳定性问题 不设置 调度器将不确定在集群中可以调度多少Pod,并且过度堆叠的Pod会产生显著的性能风险和不均匀的负载...调度器将不确定在集群中可以调度多少Pod,从而产生过度堆叠和PodOOM Kill的风险 Pod不受约束,放大“吵闹邻居”效应,并产生CPU throttling的风险 Pod不受约束,放大了“...OOM 保护:如果容器存在历史的 OOM 事件,则考虑 OOM 时的内存适量增大内存推荐结果。 资源规格规整:按指定的容器规格对推荐结果向上取整。...基本原理是基于历史的资源用量,将 Request 配置成略高于历史用量的最大值并且考虑 OOMPod 规格等因素。

58160

手写jvm中的各种OOM

我还会写各种bug,造成JVM出现OOM异常。 知己知彼,JVM的各个区域的特定 要想写出各种OOM,必须知道JVM各个区域的特点,以便针对性的写bug,造成OOM。...逻辑连续,物理不连续 通过-Xmx和-Xms来控制。 否 是 堆中内存不足,无法完成实例分配,并且堆无法再扩展时。...String的interm()是方法区的一部分 JDK1.7将它从方法区移除,使用直接内存 否 是 受方法区限制(1.7以后不会).当常量池无法再申请到内存 时会内存溢出 直接内存 即本机直接内存,不受...为了让java堆(GC堆)更容易出现OOM,我们需要把JVM的堆内存分配的小一点,需要用到的参数如下:   -Xms20m (JVM初始分配的堆内存)   -Xmx20m(最大可使用内存)   -XX:...* -Xms20m (JVM初始分配的堆内存)-Xmx20m(最大可使用内存) * -XX:+HeapDumpOnOutOfMemoryError(r,JVM会在遇到OutOfMemoryError

1.5K90

记一次特殊的生产事故,参数设置错误导致的 OOM

擦擦汗,日志已经明确提示我们java.lang.OutOfMemoryError: Java heap space,首先肯定这是一个堆内存空间引起的问题,可能的原因有: 内存加载数据量过大 例如不受行数限制的数据库查询语句...但是随后另一个同事注意到了一个事情,最后一次系统升级的时候,改动过应用启停脚本,对比旧版本的脚本,发现差异部分就是内存参数: 旧版本原为: -Xms8g -Xmx8g -Xmn3g -Xmx:设置堆的最大内存...-Xms:设置堆的初始内存大小 -Xmn:设置年轻代大小 新版本改为: -Xms8g -Xmx8g -Xmn8g 看到这里,屏幕前的一众同事都无语啊…… 事故原因 为什么-Xmn参数设置成与-Xmx...参数一样的大小会导致 OOM 呢?...区 + S0 区 GC 后,S1 区放不下 换言之,正常情况下,-Xmn参数总是应当小于-Xmx参数,否则就会触发OOM错误。

21430

Java容器化参数配置最佳实践

/-Xms 来指定 Java 堆大小,但这样指定的话,就固定了 JVM 堆占用大小,如果将 Java 应用程序移植到容器或者说 K8s Pod 中,K8S 本身有垂直扩容的能力,如果我把内存从 8G 增长到...在 K8S Pod 中,我们是否有必要指定 Java 堆大小配置 K8s 编排文件中有两个比较重要的资源限制参数 request / limit, 如下所示通过这两个参数我们可以限制内部容器占用的 CPU...这样当容器超过内存限制时,会抛出 OOM 异常,而不是杀死容器。该特性在 Java 8u191 +,10 及更高版本上可用。...-Xmx/-Xms 这一对参数配置最大优点就是所有 JDK 版本都支持 -Xmx 在这里您可以看到非容器(传统物理服务器)支持的 -Xmx,如下所示可以看到容器中的 java 8 update 131...K8s Pod优雅关闭,没你想象的那么简单!

1.6K21
领券