云原生背景下如何配置 JVM 内存

2023-05-15 19:29:33 来源:清一色财经

在解决这个问题之前还是先简单了解下容器的运行原理,因为在 k8s 中所有的应用都是运行在容器中的,而容器本质上也是运行在宿主机上的一个个经常而已。

背景

前段时间业务研发反馈说是他的应用内存使用率很高,导致频繁的重启,让我排查下是怎么回事;


(资料图片仅供参考)

在这之前我也没怎么在意过这个问题,正好这次排查分析的过程做一个记录。

首先我查看了监控面板里的 Pod 监控:

发现确实是快满了,而此时去查看应用的 JVM 占用情况却只有30%左右;说明并不是应用内存满了导致 JVM 的 OOM,而是 Pod 的内存满了,导致 Pod 的内存溢出,从而被 k8s 杀掉了。

而k8s为了维持应用的副本数量就得重启一个 Pod,所以看起来就是应用运行一段时间后就被重启。

而这个应用配置的是 JVM 8G,容器申请的内存是16G,所以 Pod 的内存占用看起来也就 50% 左右。

容器的原理

在解决这个问题之前还是先简单了解下容器的运行原理,因为在 k8s 中所有的应用都是运行在容器中的,而容器本质上也是运行在宿主机上的一个个经常而已。

但我们使用 Docker 的时候会感觉每个容器启动的应用之间互不干扰,从文件系统、网络、CPU、内存这些都能完全隔离开来,就像两个运行在不同的服务器中的应用。

其实这一点也不是啥黑科技,Linux 早就支持 2.6.x 的版本就已经支持namespace隔离了,使用namespace可以将两个进程完全隔离。

仅仅将资源隔离还不够,还需要限制对资源的使用,比如 CPU、内存、磁盘、带宽这些也得做限制;这点也可以使用cgroups进行配置。

它可以限制某个进程的资源,比如宿主机是 4 核 CPU,8G 内存,为了保护其他容器,必须给这个容器配置使用上限:1核 CPU,2G内存。

这张图就很清晰的表示了namespace和cgroups在容器技术中的作用,简单来说就是:

namespace 负责隔离cgroups 负责限制

在 k8s 中也有对应的提现:

resources:    requests:      memory: 1024Mi      cpu: 0.1    limits:      memory: 1024Mi      cpu: 4

这个资源清单表示该应用至少需要为一个容器分配一个 0.1 核和 1024M 的资源,CPU 的最高上限为 4 个核心。

不同的OOM

回到本次的问题,可以确认是容器发生了 OOM 从而导致被 k8s 重启,这也是我们配置 limits 的作用。

k8s 内存溢出导致容器退出会出现 exit code 137 的一个 event 日志。

因为该应用的 JVM 内存配置和容器的配置大小是一样的,都是8GB,但 Java 应用还有一些非 JVM 管理的内存,比如堆外内存之类的,这样很容易就导致容器内存大小超过了限制的 8G 了,也就导致了容器内存溢出。

云原生背景的优化

因为这个应用本身使用的内存不多,所以建议将堆内存限制到 4GB,这样就避免了容器内存超限,从而解决了问题。

当然之后我们也会在应用配置栏里加上建议:推荐 JVM 的配置小于容器限制的 2/3,预留一些内存。

其实本质上还是开发模式没有转变过来,以传统的 Java 应用开发模式甚至都不会去了解容器的内存大小,因为以前大家的应用都是部署在一个内存较大的虚拟机上,所以感知不到容器内存的限制。

从而误以为将两者画了等号,这一点可能在 Java 应用中尤为明显,毕竟多了一个 JVM;甚至在老版本的 JDK 中如果没有设置堆内存大小,无法感知到容器的内存限制,从而自动生成的 Xmx 大于了容器的内存大小,以致于 OOM。

标签

知识大全 搜狗怎么打颜文字

1、点击搜狗的设置属性;2、点高级;3、点自定义短语设置;4、点击直接编辑配置文件;5、把颜文字粘到文本保...

2023-01-17 10:41:01

知识领域 家长给老师或学校的意见和建议

孩子是祖国的花朵,是社会主义建设的接班人,关心孩子健康成长是一件很重要的事情;学校应建立一支优秀的...

2023-01-17 10:40:58

知识领域 她字如何组词

举例如下:1、她们,造句:她们的舞蹈跳的非常棒。2、看她,造句:我们去她家看她。3、想她,造句:我很...

2023-01-17 10:40:53

探索百科 前后成语成语

前跋后疐、 前朝后代 、前俯后仰、 前赴后继、前覆后戒 、前歌后舞、 前合后偃 、前合后仰、前呼...

2023-01-17 10:40:44

百科大全 你好吗歌词 你好吗完整歌词

歌曲:《你好吗》歌手:宋祖英歌词:在这安安静静的黄昏,谁弹起叮叮咚咚的琴带着缠缠绵绵的思绪,敲打...

2023-01-17 10:40:41

百科全书 顺丰快递一般几天到货

如果是同区快递,只需要一天时间送到;如果是同省快递,需要2天时间,不超过3天时间。包括省外快递如果是...

2023-01-17 10:40:37

知识智库 杨梅最多能吃几个

最佳答案成人10颗左右,小孩8颗左右。杨梅外形圆润,口感酸甜,很多人都喜欢吃,新鲜采摘杨梅口感酸甜,...

2023-01-17 10:40:32

百科词典 神舟九号宇航员有哪些人

1、景海鹏简介:男,汉族,山西省运城市人,中共党员,硕士学位。1966年10月出生,1985年6月入伍,1987...

2023-01-17 10:40:28

智库知识 CF寂静村如何跳楼顶

教大家如何用俩连跳跳寂静村楼顶。相信大家喜欢玩CF生化的小伙伴们多喜欢玩寂静村因为这个图小。今天教...

2023-01-17 10:40:25

百科问答 名侦探柯南所有剧场版的片尾曲

剧场版第一弹的《引爆摩天楼》,剧场版第二弹的《十四番的目标》,剧场版第三弹的《世纪末的魔术师》,...

2023-01-17 10:40:20
x 广告
x 广告

Copyright  2015-2022 亚洲粮油网版权所有  备案号:豫ICP备20022870号-9   联系邮箱:553 138 779@qq.com