首页 > 其他分享 >让JVM感知K8s资源限制

让JVM感知K8s资源限制

时间:2023-04-05 15:25:02浏览次数:56  
标签:限制 内存 JVM Java 感知 K8s 资源

无感知导致的问题

当我们在K8s中Deployments配置资源限制和预留的时候,比如设置最大内存为500M。但是宿主机的总内存为8G,这时候Pod启动后会超出内存限制,被Deployments杀掉。但为了维护设置的副本数量又创建新的,如此反复。

原因是默认情况JVM默认最大堆空间为系统总内存的1/4,在容器中没有感知到集群为Pod设置的资源限制,而是按宿主机的内存算的,所以最终超过限制内存。

解决方案

解决思路有两种:

  • 一种是按资源限制算好,在 Java 启动参数中设置堆内存大小,保证不超限制
  • 另一种是让JVM感知到容器资源限制,按这个值来分配内存

Java SE 8u131向后 和 JDK 9 都有参数支持:如下

-XX:+UnlockExperimentalVMOptions 
-XX:+UseCGroupMemoryLimitForHeap

但是如果资源限制默认分配1/4有点浪费,因为一般一个Pod就跑这一个主要进程,所以可以改下这个默认值,如下:

# 2 代表1/2
-XX:MaxRAMFraction=2

这样配置并不代表就是资源限制的1/2,因为除了堆内存还有其他堆外内存需要空间,所以实际值要远小于1/2。网上有人在测试环境设置1,代表100%,但是我试过之后还是超过资源限制了,所以选了2,实际需要根据情况决定。

参考连接

Java SE support for Docker CPU and memory limits

测试例子

标签:限制,内存,JVM,Java,感知,K8s,资源
From: https://www.cnblogs.com/shuiyao3/p/17289467.html

相关文章

  • 如何使用和查找JVM选项
    Java程序启动方式执行类:java[-options]class[args...]执行jar文件:java[-options]-jarjarfile[args...]options指JVM选项,比如堆内存大小;args指程序接收的参数,也就是publicstaticvoidmain(String[]args)中的args。class指启动类文件(.class)的路径,jarfile指......
  • JVM的垃圾收集算法
    介绍分代收集理论和几种垃圾收集算法的思想及其发展过程。分代收集理论当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(GenerationalCollection)的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,分代收集理论它建立在两个分代假说之上:弱......
  • JVM的垃圾收集算法
    介绍分代收集理论和几种垃圾收集算法的思想及其发展过程。分代收集理论当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(GenerationalCollection)的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,分代收集理论它建立在两个分代假说之上:......
  • 使用sealos 快速部署生产可用的k8s环境
    sealos是一个很不错的k8s部署工具,内部实际上也是基于了kubeadm,但是sealos做了不少方便的扩展比如自己搞了一层基于lvs的ha,可以简化我们k8s环境ha的问题(但是如果需要外部访问还是需要一层ha方案的)同时sealos提供了自己的一套容器镜像仓库,离线部署也比较简单,升级也比......
  • 离线重装k8s-mef
    1.k8s (提前下载镜像)kubeadmresetkubeadminit最好可以指定versioncp-iadmin.conf$HOME/.kube/configchown$(id-u):$(id-g)$HOME/.kube/config2.calico(提前下载镜像)find/-namecalico.yamlkubectlapply-fcalico.yaml3.去隔离kubectltaintnodes--al......
  • 最新centos7 部署 k8s v1.26,简单易懂,跟着命令敲就完事
    其实没什么好说的,搭环境搞了一整天,人已经麻了,踩了很多坑,网上教程的版本大都比较旧,总是和最新版本各种地方不兼容,把坑踩完了,k8s目前最新的版本是v1.26,跟着命令敲就行了,我已经重复部署了很多次了,坑已经排完了....我试验的是1主2从结构,centos2c2g就足够。centos7部署k8s1m2n......
  • JVM——JVM级别下的高并发问题
    摘要本文将深入的学习与分析JVM虚拟机的原理和相关的调优的相关实例。JVM级别下的高并发问题Java内存模型与线程“让计算机并发执行若干个运算任务”与“更充分地利用计算机处理器的效能”之间的因果关系,看起来顺理成章,实际上它们之间的关系并没有想象中的那么简单,其中一个重......
  • 44、K8S-调度机制-理论知识
    1、调度体系1.1、流程图1.1.1、架构层面-集群的组成1.1.2、资源层面-k8s集群资源的管控1.1.3、网络层面-k8s集群资源的访问1.1.4、认证层面-k8s集群资源的认证1.1.5、pod周期-pod创建的完整流程1.1.6、pod创建流程  1.1.7、存储层面 1.1.8、创建层面-资源......
  • 「机器人感知与控制关键技术」最新2023研究综述
    作者:王耀南,江一鸣,姜娇,张辉,谭浩然,彭伟星,吴昊天,曾凯来源:自动化学报原文地址:「机器人感知与控制关键技术」最新2023研究综述智能机器人在服务国家重大需求,引领国民经济发展和保障国防安全中起到重要作用,被誉为“制造业皇冠顶端的明珠”。随着新一轮工业革命的到来,世界主要工业国家都开......
  • Kubernetes——问题与解决方案一、k8s重启报错 :The connection to the server 192.168
    摘要Kubernetes运行过程中出现的各种问题,因此本人整理出本人遇到的有关于的k8s的相关问题和解决方案一、k8s重启报错:Theconnectiontotheserver192.168.102.149:6443wasrefused1.1现象k8s重启报错#kubectlgetpodsTheconnectiontotheserverxxx:6443wasrefused......