k8s 容器 java 应用内存限制不生效

news2024/10/6 6:50:09

一   k8s java 应用内存限制不生效

回顾:Linux杂谈之java命令

namespace负责资源隔离  cgroups负责资源限制    容器JVM最佳实践

Metaspace 是 '非 Heap 内存' 管理空间,那么 Heap 就是'操作'空间

JVM内存模型简介

隔离: 两个进程完全'隔离'

感知: 使用 docker 的时候会感觉'每个容器启动'的应用之间'互不'干扰

从'文件系统、网络、CPU、内存'这些都能完全'隔离'开来,就像两个运行在'不同的服务器中'的应用

补充: 容器在'宿主机'表现为一个'进程'

++++++++++  "分割线"  ++++++++++

限制: CPU、内存、磁盘、带宽等

推荐 JVM 的配置'约等于'容器限制的 '70%~80%'

补充: hpa 设置'不合理' 导致 '频繁重启'

①  问题引入

思考: 如果在'java容器'中 未设置JVM相关参数、或设置不合理导致'不生效'

现象: java 应用 limit是8G,- Xms是6G,但是实际检'监测'到服务跑了7g,但是应用'没有被OOM'

补充: 金融容器,执行 'free -m' 看到的内存使用状况和'宿主机'中的保持一致

云原生时代: JVM '内存机制' 和 Kubernetes '内存管理'

'观测'方式: docker stats 和 kubectl top pods -n 观察 '内存'使用

docker stats --no-stream --format \

"table{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"

②   jdk版本与jvm参数

-XX:MaxRAMPercentage, -XX:MinRAMPercentage    -Xmx, -Xms

java容器 不同jdk版本验证

细节: jdk '1.8191+ '设置 'Percentage'值时候'不能'为整数,jdk1.10+之后可以'为整数'

  1、在191版本'后',-XX:{Min|Max}RAMFraction 被'弃用'

  2、引入了-XX:MaxRAMPercentage,其值介于0.0到100.0之间,默认值为'25.0'

 

JVM UserContainerSupport    推荐JVM参数设置

-XX:+UseContainerSupport 允许 JVM 从'主机'读取 cgroup 限制

例如: 可用的 CPU 和 RAM,并进行相应的配置

效果: 这样当容器超过'内存限制'时,会抛出'OOM异常',而'不是'杀死容器

选用jdk版本: jdk 8u191+,推荐'1.8.0_202'

核心JVM参数: -XX:UseContainerSupport  -XX:MaxRAMPercentage=75.0

补充: jdk8u191+ 为 '适配 docker容器' 新增上面'几个'参数 

-Xmx 不受jdk版本限制

-XX:MetaspaceSize 解读

GC JVM参数解读

③  Java启动一些默认行为

'默认'情况下,JVM '自动'分配的 heap 大小取决于'机器'配置

 比如: 我们到一台 '32G' 内存服务器

 java -XX:+PrintFlagsFinal -version | grep -Ei "maxheapsize|maxram"

 

-Xms: 初始'heap'堆内存,会会立刻'被占用',默认为物理内存的 '1/64'

-Xmx: 最大堆内存,或者说'Heap'堆内存的'上限',默认为物理内存的 '1/4'

一个容器内存分配: 'Heap' + '非Heap [MetaSpace]等' + '容器中其它内存'

细节: 需要在最大'堆空间'、'非堆内存'使用量和 'pod 限制'之间取得平衡

补充: 'ES' 要求 -Xms和-Xmn保持'一致'

++++++++++++++  "分割线"  ++++++++++++++

1、MaxMetaspaceSize的默认值是'无限制',推荐设置'256M'

2、但可以通过'-XX:MetaspaceSize'和'-XX:MaxMetaspaceSize'来设置初始和最大值
​
++++++++++++++  "分割线"  ++++++++++++++

-XX:InitialRAMPercentage=75.0 -XX:MaxRAMPercentage=75.0 \

-XX:MinRAMPercentage=75.0 -XX:+PrintGCDetails -XX:+PrintGCDateStamps \

-XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintReferenceGC \

-XX:+PrintGCApplicationStoppedTime -Xloggc:gc-%t.log \

-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=15 -XX:GCLogFileSize=50M

2C4G --> 配置指定 75% ,相当于设置了 -Xms3g -Xms3g

④  通过LimitRange 做ns内的资源限制

k8s 容器 java的资源限制

将所由的options都放到 -jar 面前才能生效

spring boot 配置环境变量不生效

了解'业务代码' + '线上运维环境' --> '最佳定位'  --> '运维开发'

-XX:UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:MinRAMPercentage=75.0 

-Xms -Xmn 

++++++++++++ '查看容器对应的宿主机PID' ++++++++++++

docker top container_id 

docker inspect -f '{{.State.Pid}}'  container_id  

 k8s网络之(一)如何调试容器网络nsenter 原创

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

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

相关文章

【STM32】STM32F4中USB的CDC虚拟串口(VCP)使用方法

文章目录 一、前言二、STM32CubeMX生成代码2.1 选择芯片2.2 配置相关模式2.3 设置时钟频率2.4 生成代码2.5 编译并下载代码2.6 结果2.7 问题 三、回环测试3.1 打开工程3.2 添加回环代码3.3 编译烧录并测试 四、出现问题和解决方法4.1 烧录总是要自己插拔USB4.2 自己生成的工程没…

141:vue+leaflet 利用高德逆地理编码,点击地图标记marker,popup地址信息

第141个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中利用高德逆地理编码,点击地图标记marker,popup地址信息 。主要利用高德地图的api将坐标转化为地址,然后在点击的位置,弹出弹窗,在里面显示出地址信息。 直接复制下面的 vue+leaflet源代码,操作2分钟…

14、Kafka ------ kafka 核心API 之 流API(就是把一个主题的消息 导流 到另一个主题里面去)

目录 kafka 核心API 之 流APIKafka流API的作用:流API的核心API:使用流API编程的大致步骤如下:代码演示 流API 用法MessageStream 流API 代码演示消息从 test1主题 导流到 test2主题演示使用匿名内部类对消息进行处理Topology 拓扑结构 讲解 代…

【AIGC】CLIP

CLIP的基本原理 对比学习: Clip使用对比学习来训练模型。对比学习的目标是通过将正样本(相似的图像和文本对)与负样本(不相似的图像和文本对)进行比较,从而使模型学会区分不同样本之间的差异。这有助于模型…

社区分享|百果园选择DataEase搭档蜜蜂微搭实现企业数据应用一体化

百果园,全称为深圳百果园实业(集团)股份有限公司,2001年12月成立于深圳,2002年开出中国第一家水果专卖店。截至2022年11月,百果园全国门店数量超过5600家,遍布全国140多个城市,消费会…

TensorRT英伟达官方示例解析(二)

系列文章目录 TensorRT英伟达官方示例解析(一) TensorRT英伟达官方示例解析(二) 文章目录 系列文章目录前言一、03-BuildEngineByTensorRTAPI1.1 建立 Logger(日志记录器)1.2 Builder 引擎构建器1.3 Netwo…

【SGX系列教程】(一)Intel-SGX SDK在ubuntu22.04下安装全流程

文章目录 一.概述1.1 SGX三大组件1.2 SGXDataCenterAttestationPrimitives 二.安装流程2.1 检查服务器是否支持SGX2.2 sgx硬件/软件开启方法2.3 sgx dirver驱动安装;2.3.1 linux-sgx-driver驱动程序2.3.2 Intel SGX Support in the Linux Kernel(linux内…

【开源】基于JAVA的图书管理系统

目录 一、 系统介绍二、 功能模块2.1 登录注册模块2.1 图书馆模块2.2 图书类型模块2.3 图书模块2.4 图书借阅模块2.5 公告模块 三、 源码解析3.1 图书馆模块设计3.2 图书类型模块设计3.3 图书模块设计3.4 图书借阅模块设计3.5 公告模块设计 四、 免责说明 一、 系统介绍 图书管…

AnimatedDrawings:让绘图动起来

老样子,先上图片和官网。这个项目是让绘制的动画图片动起来,还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹,启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…

4小时精通MyBatisPlus框架

目录 1.介绍 2.快速入门 2.1.环境准备 2.2.快速开始 2.2.1引入依赖 2.2.2.定义Mapper ​编辑 2.2.3.测试 2.3.常见注解 ​编辑 2.3.1.TableName 2.3.2.TableId 2.3.3.TableField 2.4.常见配置 3.核心功能 3.1.条件构造器 3.1.1.QueryWrapper 3.1.2.UpdateWra…

SpringBoot3集成Zookeeper

标签:Zookeeper3.8 ,Curator5.5; 一、简介 ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步、提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。 二、环境搭建 1、修改配置文件 # 1、拷贝一份…

不合格机器人工程讲师再读《悉达多》-2024-

一次又一次失败的经历,让我对经典书籍的认同感越来越多,越来越觉得原来的自己是多么多么的无知和愚昧。 ----zhangrelay 唯物也好,唯心也罢,我们都要先热爱这个世界,然后才能在其中找到自己所热爱的事业。 ----zh…

用Netty手写Http/Https服务器

Netty是一个以事件驱动的异步通信网络框架&#xff0c;可以帮助我们实现多种协议的客户端和服务端通信&#xff0c;话不多说&#xff0c;上代码&#xff0c;需要引入下方依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artif…

C++虚函数表的简单理解

背景 C的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。其中基于多态特性的虚函数表概念是C开发者面试的长考题。今天梳理一下虚函数表的基本概念。 概念理解 为了实现 C 的多态&#xff0c;C 使用了一种动态绑定的技术。这个技术的核心是虚函数表。 虚表就是为…

小程序直播项目搭建

项目功能&#xff1a; 登录实时聊天点赞功能刷礼物取消关注用户卡片直播带货优惠券直播功能 项目启动&#xff1a; 1 小程序项目创建与配置&#xff1a; 第一步 需要登录小程序公众平台的设置页面进行配置&#xff1a; 首先需要是企业注册的才可以个人不能开通直播功能。服务类…

科技发展趋势,墨水屏电子桌牌将发挥更重要作用

随着科技的不断发展&#xff0c;电子桌牌作为信息展示和宣传的新型设备&#xff0c;逐渐在各个行业得到广泛应用。在国企单位、政府部门、大企业、外企等&#xff0c;墨水屏电子桌牌作为一种新型的数字化展示工具&#xff0c;也已经得到了越来越多的应用。下面&#xff0c;中科…

Spring Boot 初始(快速搭建 Spring Boot 应用环境)

提示&#xff1a; ① 通过下面的简介可以快速的搭建一个可以运行的 Spring Boot 应用&#xff08;估计也就2分钟吧&#xff09;&#xff0c;可以简单的了解运行的过程。 ② 建议还是有一点 spring 和 springMVC的基础&#xff08;其实搭建一个 Spring Boot 环境不需要也没有关系…

微信小程序(十一)表单组件(进阶)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a;&#xff08;涉及内容较多&#xff0c;建议细看源码&#xff09; 1.radio-group的使用与数据处理 2.checkbox-group的使用与数据处理 3.picker的使用与数据同步处理(此处示范了地域与日期) 源码&#xff1a; form…

数据结构与算法——队列原理及C语言底层实现

数据结构与算法——队列原理及C语言底层实现 队列概念顺序队列1. 顺序队列原理2. 队列的创建3. 入队与出队4. 判断满队与空队5. 清空队列与释放空间6. 主流程测试 链式队列1. 链式队列的创建2. 链式队列入队3. 链式队列出队4. 判断是否为空队5. 清空队列与释放空间6. 主流程测试…

后端开发_单元测试

后端开发_单元测试 1. 简介2. JUnit 4使用方法2.1 jar包引入2.2 测试用例1. 简介 2. JUnit 4使用方法 2.1 jar包引入 1. 本地依赖引入方式 Junit4.jar包 2. maven方式引入jar <dep