k8s生产环境容器内部JVM参数配置解析及优化

2023-11-02

试问:我们为什么要做jvm参数配置优化?

避免默认条件或者复杂情况导致频繁STW或者OOM!!!

1.堆总内存初始化大小分配和最大值分配
-Xms512m -Xmx512m  设置为FullGC之后的老年代内存占用的3-4倍-线下调试

​ 1.初始分配的堆内存由-Xms指定,默认是物理内存的1/64

​ 2.最大堆内存由-Xmx指定,默认是物理内存的1/4

​ 3.默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制

​ 4.空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制

​ 5.因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小

​ Tips:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误 ,

2. 非堆总内存初始化大小分配和最大值分配(1.8为metaspace)
 -XX:PermSize128m -XX:MaxPermSize128m PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍-线下调试

PermGen space初始化大小默认是物理内存的1/64,最大为物理内存的1/4,PermGen用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS 的话,就很可能出现PermGen space OOM错误

​ Tips:这个值不用设置的很大、浪费空间、够用就行

3.堆内存之年轻代年老代大小设置
-Xmn128m 	 年轻代Xmn的设置为老年代存活对象的1-1.5倍-线下调试  Sun官方建议年轻代的大小为整个堆的3/8左右
-XX:NewRatio 默认为2,年轻代(包括Eden和两个Survivor区)与年老代的比值,-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5

young generation的heap大小,一般设置为Xmx的1/3或1/4,如果设置的比较小会频繁的进行minorGC、还有可能让不需要的对象进入永久代占用空间,如果设置的太大又会导致导致永久代空间变小发生FullGC
Tips:Xms=Xmx并且设置了Xmn的情况下,该参数不需要设置NewRatio

4.线程栈大小
-Xss512k 	默认1024k java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

​ Tips: 一般说来,Stack Space为128K是够用的 、只要没有深度递归、一般不会爆出 StackOverflowError,可以不用设置此项

5.GC日志输出
参数 含义
-XX:PrintGC 打印GC日志
-XX:+PrintGCDetails 打印详细的GC日志。还会在退出前打印堆的详细信息。
-XX:+PrintHeapAtGC 每次GC前后打印堆信息。
-XX:+PrintGCTimeStamps 打印GC发生的时间。
-XX:+PrintGCApplicationConcurrentTime 打印应用程序的执行时间
-XX:+PrintGCApplicationStoppedTime 打印应用由于GC而产生的停顿时间
-XX:+PrintReferenceGC 跟踪软引用、弱引用、虚引用和Finallize队列。
-XLoggc:gc.log 将GC日志以文件形式输出。
-XX:+PrintPromotionFailure 多大的新生代对象晋升到老生代失败从而引发Full GC时的

​ Tips: 上测试环境可以搞一搞、生产记得关了

6.每个线程堆栈大小
-Xss512k 	默认1024k java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

​ Tips: 一般说来, 不能无限生成,经验值在3000~5000左右 ,Stack Space为128K是够用的 、只要没有深度递归、一般不会爆出 StackOverflowError,可以不用设置此项

附:常用容器内存大小对应的jvm内存配置

容器启动常用配置

测试环境加GC打印、生产环境根据情况选择
预留50~100m的内存给容器内其他的应用,不然容易OOM被Killed掉
512M

-Xms450m -Xmx450m -Xmn128m -Xss512k -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XLoggc:appgc.log

1024M

-Xms950m -Xmx950m -Xmn256m -Xss512k -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XLoggc:appgc.log

2048M

-Xms1950m -Xmx1950m -Xmn512m -Xss512k -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XLoggc:appgc.log
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s生产环境容器内部JVM参数配置解析及优化 的相关文章

  • Gradle 构建错误:无法从 https://repo1.maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml 加载 Maven 元数据

    我在 Android studio 中遇到 gradle 构建错误 如下所示 Error A problem occurred configuring project MyApp Could not resolve all dependen
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • mybatis 注解的方式批量插入,更新数据

    一 当向数据表中插入一条数据时 一般先检查该数据是否已经存在 如果存在更新 不存在则新增 使用关键字 ON DUPLICATE KEY UPDATE zk device id为主键 model PushBindRecord 二 批量查询 使
  • JS——内部对象

    文章目录 1 Date 2 JSON 1 Date 基本使用 var now new Date now getFullYear 年 now getMonth 月 0 11月 now getDate 日 now getDay 星期几 now
  • Java九大内置对象

    Java九大内置对象 1 Request对象 该对象封装了用户提交的信息 通过调用该对象相应的方法可以获取封装的信息 即使用该对象可以获取用户提交的信息 当Request对象获取客户提交的汉字字符时 会出现乱码问题 必须进行特殊处理 首先
  • decimal类型对象里面定义什么类型_详解MySQL数据类型DECIMAL(N,M)中N和M分别表示的含义...

    同事问MySQL数据类型DECIMAL N M 中N和M分别表示什么含义 M不用说 显然是小数点后的小数位数 但这个N究竟是小数点之前的最大位数 还是加上小数部分后的最大位数 这个还真记不清了 于是乎 创建测试表验证了一番 结果如下 测试表
  • 【微信小程序】导出Excel文件

    导出 doOutExcel let fileName 考勤列表 wx request url XXX method POST header content type application json Authorization token
  • PCL 最远点采样

    目录 一 算法原理 1 算法概述 2 实现流程 3 主要函数 4 参考文献 二 代码实现 三 结果展示 四 相关链接 一 算法原理 1 算法概述 Farthest Point Sampling FPS 顾名思义 也就是每次采样的时候都选择离
  • Redis 入门

    前言 redis作为nosql家族中非常热门的一员 也是被大型互联网公司所青睐 无论你是开发 测试或者运维 学习掌握它总会为你的职业生涯增色添彩 当然 你或多或少已经了解redis 但是你是否了解其中的某些细节 本片文章将详细介绍redis
  • ubuntu 安装360浏览器

    ubuntu 安装360浏览器 推荐一个我自己做的普法公众号 大可说法律 有法律方面咨询的可以关注 因为之前收藏的书签都在360浏览器 为了方便 我找到了下载360浏览器的方法 官方下载 https browser 360 cn se li
  • OpenMMLab MMYOLO目标检测环境搭建(一)

    1 环境搭建 conda create n mmyolo python 3 7 y 创建环境 conda activate mmyolo 激活环境 conda install pytorch torchvision torchaudio c
  • 【获奖公布】征文

    AI Artificial Intelligence 即人工智能 人工智能领域的研究包括机器人 语音识别 图像识别 自然语言处理和专家系统等 人工智能从诞生以来 理论和技术日益成熟 应用领域也不断扩大 可以设想 未来人工智能带来的科技产品
  • 董事长、CEO、总裁、总经理的关系

    董事长 公司董事会主席 直接领导公司里的董事会 以及附设的执行委员会 任免委员会 薪酬委员会 审计委员会等一些专门委员会 是公司的老大 首席执行官 CEO 公司董事会的代理人 执行董事会授予的部分经营管理权利 是公司政策执行机构的最高负责人
  • 自己的小碎念

    现在是2019年6月26日下午15 11 我打算写一篇日记 记下这一天的经过 早晨七点 山鸡疯狂敲门 吓得我擦点猝死 我们宿舍都起床准备参加毕业典礼 像往常一样洗漱 聊天 然后去了礼堂门口 我们在那里拿着发的歌词 也没多看几眼 和朋友们闲聊
  • rocketmq客户端日志配置

    rocketmq客户端会打印一些日志如消费进度 心跳等 默认的是滚动10个日志文件 每个100MB 又一次看到这个日志目录有几十GB 手动删除 但是悲剧的是rocketmq没有释放这个日志目录 导致不能真正的释放磁盘空间 于是研究了下怎么配
  • Android Studio 的 Android Monitor / DDMS 中不显示应用的进程(看不到 log)

    http blog csdn net u011240877 article details 53160119 问题 不知道怎么 app 对应的进程在 Android Monitor DDMS 中都看不到了 想调试或者看个日志都不行 分析 一
  • 拳王虚拟项目公社:闲鱼最强的实操赚钱方法,你一定不知道!

    闲鱼 很多人都很喜欢的一个二手交易平台 也很多人喜欢在这个平台上赚钱 于是乎就不断的找各种方法 教程 在拳王公ZH的后台每天都会有朋友搜索免费的闲鱼资源 所以拳王不得不为这些朋友们着想一下 拳王今天就满足大众的需求 写一篇自己总结实操过的干
  • python统计单词个数

    统计句子单词个数 mydict for i in input 英文句子 split if i in mydict mydict i 1 else mydict i 1 for key value in mydict items print
  • 推荐 7 月份 yyds 的开源项目

    本期推荐开源项目目录 1 Notion 的开源替代方案 2 Flutter 富文本编辑器 3 所有 Demo 的妈 4 30秒的代码 5 面向程序员的全栈资源集 6 基于项目的学习 7 开源管理系统 01 Notion 的开源替代方案 Ap
  • axios token失效刷新token怎么重新请求_Token 刷新并发处理解决方案

    对 Token 进行刷新续期 我们要解决并发请求导致重复刷新 Token 的问题 这也是设计刷新 Token 的难点 这里我会分别介绍前端和后端各自的处理方案 后端方案 利用 Redis 缓存 当同时发起多个请求时 第一个接口刷新了 Tok
  • anaconda spyder使用技巧

    spyder 很简单的python代码编辑器 目录 界面布局 快捷键 设置语言 设置默认打开文件夹 高级技巧 调试代码 高级技巧 创建spyder虚拟环境 恢复默认布局 英语阅读难的话 可以先跳到设置语言 界面布局 选项卡 file 文件
  • k8s生产环境容器内部JVM参数配置解析及优化

    试问 我们为什么要做jvm参数配置优化 避免默认条件或者复杂情况导致频繁STW或者OOM 1 堆总内存初始化大小分配和最大值分配 Xms512m Xmx512m 设置为FullGC之后的老年代内存占用的3 4倍 线下调试 1 初始分配的堆内