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

一   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 原创

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进程线程知识

一 初识linux线程 1 线程由来 我们之前说创建一个进程,要创建进程控制块pcb,进程地址空间,页表,而且我之前的博客中都有意无意的说明这个pcb是描述进程的,是os用来管理进程的,而有了线程后,就要…

linux中用户及用户组信息

1,linux通过用户名和口令来验证用户的身份。 2,几个用户可以组成一个用户组。 3,useradd工具添加用户,groupadd命令添加用户组。 4,history 命令查看用户在Shell中执行命令的历史记录。 5,userdel命令删…

机械硬件知识学习

目录 1.电机减速机、扭矩2.伺服电机、步进电机、直线电机3.电机马达的曲线运动是如何转化为轴的直线运动 大佬科普运动控制系统链接:https://www.cnblogs.com/cariohu/p/15508175.html 自己对机械知识的了解是盲区,学习下接触到的一些硬件知识&#xff0…

Ubuntu Desktop Server - xport: command not found

Ubuntu Desktop Server - xport: command not found 1. xport: command not found2. export 错误写成了 xportReferences 1. xport: command not found 2. export 错误写成了 xport strongforeverstrong:~$ gedit ~/.bashrcReferences [1] Yongqiang Cheng, https://yongqian…

部署 Seafile 开源企业云盘

一、Seafile 介绍 Seafile 简介 :::info 官网:https://www.seafile.com/ GitHub:https://github.com/haiwen/seafile ::: Seafile 是一款开源的企业云盘,注重可靠性和性能。 支持 Windows,Mac,Linux,iOS&…

算法复杂度分析看这一篇就够了

2023年也慢慢的步入了年末,光阴易逝,前段时间在学习算法的时候谈到了复杂度,所以今天就来总结一下 算法的复杂度是衡量算法执行效率的度量标准。它描述了随着输入规模的增加,算法所需执行的基本操作的数量或运行时间的增长程度。一…

JSP的学习

1.JSP概念: Java服务端页面;一种动态的网页技术,既可以定义HTML,JS,CSS等静态内容,也可以定义Java代码的动态内容;JSPHTMLJava;JSP的作用:简化开发,避免了在Servlet中直接输出HTML标签; 2.JSP快速入门 3.JSP原理 概念:Java Server Pages,Java服务端页…

C# CefSharp 输入内容,点击按钮,并且滑动。

前言 帮别人敲了个Demo,抱试一试心态,居然成功了,可以用。给小伙伴们看看效果。 遇到问题 1,input输入value失败,里面要套了个事件,再变换输入value。后来用浏览器开发工具,研究js代码,太难了&a…

UG制图-全剖和阶梯剖

当机件的内部形状较复杂时,视图上将出现许多虚线,不便于看图和标注尺寸 解决方法就是使用剖视图 剖视图的形成:假想用一个剖切面将机件剖开,移去剖切面和观察者之间的部分,将其余部分向投影面投射,并在剖切…

【数据结构】 链栈的基本操作 (C语言版)

目录 一、链栈 1、链栈的定义: 2、链栈的优缺点: 二、链栈的基本操作算法(C语言) 1、宏定义 2、创建结构体 3、链栈的初始化 4、链栈的进栈 5、链栈的出栈 6、获取栈顶元素 7、栈的遍历输出 8、链栈的判空 9、求链…

Windows内网渗透篇-后门持久化姿势总结

简介 拿下服务器之后,应该怎么做到持久化控制呢?下面总结了内网渗透中常见的持久化姿势,如:映像劫持,定时任务,登录脚本等常见持久化操作,希望对大家工作或者学习有一定的帮助. 隐藏文件 创建系统隐藏文件attrib +s +a +r +h filename attrib +s +h filename 利用NTFS ADS…

JeecgBoot集成TiDB,打造高效可靠的数据存储解决方案

TiDB简介 TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生…

Vue3组件库开发 之Button(2) 未完待续

Vue3组件库开发 之Button(1) 中新建项目,但未安装成功ESLINT 安装ESLINT npm install eslint vite-plugin-eslint --save-dev 安装eslint后,组件文件出现错误提示 添加第三方macros ,虽然不是官网但很多开发者都是vue3开发人员 安装macros…

用通俗易懂的方式讲解:使用 MongoDB 和 Langchain 构建生成型AI聊天机器人

想象一下:你收到了你梦寐以求的礼物:一台非凡的时光机,可以将你带到任何地方、任何时候。 你只有10分钟让它运行,否则它将消失。你拥有一份2000页的PDF,详细介绍了关于这台时光机的一切:它的历史、创造者、…

Midjourney 提示词入门 | 提示词格式 特点如何写好自己的提示词?进阶技巧

文章目录 1 Prompt格式2 文本提示词的基本要求3 好的文本提示词的特点 上一节我们初步了解了Midjourney的使用 那么在使用过程中最重要的是通过Prompt告知Midjourney怎么画 因而高效写Prompt非常重要~ 先来了解一下Prompt基本格式 1 Prompt格式 /imagine Text_prompt如下图…

CSS文本外观属性内容(知识点1)

知识引入 使用HTML可以对文本外观进行简单的控制,但是效果并不理想,为此CSS提供了一系列的文本外观样式属性,具体如下。 color:文本颜色 color属性用于定义文本的颜色,其取值方式有以下三种。 (1)预定义…

11.什么档次的原型模式和我写的一样

在《生化危机》系列电影中,克隆人是个频频出现的话题。保护伞公司为了需求复制出另一个战力相当的战士Alice,不惜克隆成百上千个Alice,然而直到最后,非但没有真正克隆出另一个完美的Alice,就连Alice自己也被证实是保护…

conda+sh----Windows在conda环境中运行.sh文件

在玩项目的时候发现需要运行.sh文件,但是查询后发现这是linux的命令,cmd直接运行就是sh不是内外部命令,总结了一下使用方法 1、下载安装git 下载git工具下载连接 记住安装路径 2、修改系统变量 右键此电脑—属性—高级系统设置—环境变量&#xff0…

MySQL也开始支持JavaScript了

2023 年 12 月 16 日,Oracle 公司在一篇名为 《Introducing JavaScript support in MySQL》的文章中宣布 MySQL 数据库服务器将开始支持 JavaScript 语言。 这个举措标志着继PostgreSQL之后, MySQL 也支持使用 JavaScript 编写函数和存储过程了。作为最…

JAVA:OFD Reader Writer 开源库技术解析

1、简述 OFD Reader & Writer 是一个由开源社区推动的 OFD 文件处理库,它旨在提供对 OFD 格式文件的读取和写入功能。这一开源项目为开发者提供了强大而灵活的工具,使得在应用程序中处理和生成 OFD 文件变得更加容易和高效 开源地址:htt…