JVM调优最佳参数

news/2024/4/25 15:56:07/文章来源:https://blog.csdn.net/qq_46130027/article/details/130328059

项目背景

C端的项目,用户量比较多,请求比较多。

启动参数表

在这里插入图片描述在这里插入图片描述
Xmx指定应用程序可用的最大堆大小。
Xms指定应用程序可用的最小堆大小。

(一般情况下,需要设置Xmx和Xms为相等的值,且为一个固定的值)
如果该值设置过小,那么当内存不足,则会去操作系统中申请内存,整体进行一个扩容的话,可能会产生内存的抖动。如果产生内存抖动则会导致我们服务有一个停顿。所以我们的考虑是一步扩到位,那么有人可能会说这种方式可能会对空间做一些浪费。那么一般我们整个容器是布置一个单体应用。这种情况下,是用空间换时间的一种方式。

-XX:newSize 新生代初始化内存的大小(注意:该值需要小于-Xms的值)。
-XX:MaxnewSize 新生代可被分配的内存的最大上限(注意:该值需要小于-Xmx的值)。

-XX:MetaspaceSize和-XX:MaxMetaspaceSize设置元空间初始大小以及最大可分配大小。
JDK1.8之后,设置了元空间去存储我们类的各种各样的信息,他是用来保证我们元数据大小的初始化和最大可分配的大小。

如果说,不配置的话,他会一直往我们的内存去进行申请。内存有多大,最大的峰值就可能达到多大。最好还是需要一个配置,防止把我们整个机器的内存占用,导致我们整个机器内存不够的情况。

-Xss:设置栈内存的大小,设置的栈的大小决定了函数调用的最大深度。
Xss设置的大小决定了函数调用的深度,如果函数调用的深度大小设置的Xss大小,那么将会抛“java.lang.StackOverflowError”异常。

-XX:+UnlockExperimentalVMOptions:解锁实验参数。

-XX:+UseParNewGC: 新生代用parnew收集器

-XX:ParallelGCThreads:这个参数是指定并行GC线程的数量,一般最好和CPU核心数量相当。默认情况下,当CPU数量小于8,ParallelGCThreads的值等于CPU数量,当CPU数量大于8时,则使用公式:ParallelGCThreads=8+(N-8)*5/8)=3+((5引*CPU)/8);同时这个参数只要是并行GC都可以使用,不只是ParNew。

-XX:+UseConcMarkSweepGC:使用cms收集器。
JVM分为新生代和老年代,老年代使用是cms收集器。

-XX:+UseCMSCompactAtFullCollection XX:CMSFullGCsBeforeCompaction=1:
来配置在进行了Full GC时,对老年代进行压缩整理,处理掉内存碎片,其中CMSFuLlGCsBeforeCompaction配置进行了多少次Full GC之后执行一次内存压缩。

-XX:CMSInitiatingOccupancyFraction可以指定当老年代空间使用的值达到多少才进行一次CMS拉圾回收。

-XX:+UseCMSInitiatingOccupancyOnly:指定用设定的回收阚值(-XX:CMSInitiatingOccupancyFraction参数的值),如果不指定,JVM仅在第一次使用设定值,后续则会根据运行时采集的数据做自动调整,如果指定了该参数,那么每次JVM都会在到达规定设定值时进行GC。不过大多数情况下,JVM都能够作出更好的垃圾收集决策,所以如果不是很有信心的话,不建议使用该参数,放心的把决定权交给JVM。

-XX:MaxTenuringThreshold设置的是年龄阈值,默认15(对象被复制的次数)

-XX:+ExplicitGCInvokesConcurrent:System.gc0是正常FULL GC,会产生STW(Stop of Work)。打开此参数后,在做System…gc0时会做background模式CMS GC,即并行FULL GC,可提高FULL GC效率。

-XX:+CMSParallelRemarkEnabled:通过CMSScavengeBeforeRemark参数可以强制在重新标记阶段之前强制进行一次YoungGC,通过设置CMSParallelRemarkEnabled参数可以开启并行的Remark,加快remark的速度。

-XX:-OmitStackTracelnFastThrow:字面意思是省略异常栈信息从而快速拖出,那么JVM是如何做到快速抛出的呢?JVM对一些特定的异常类型做了Fast Throw优化,如果检测到在代码里某个位置连续多次地出同一类型异常的话,C2会决定用Fast Throw方式来地出异常,而异常Trace即详细的异常栈信息会被清空。这种异常抛出速度非常快,因为不需要在堆里分配内存,也不需要构造完整的异常栈信息。

参考资料:【经验分享】Jvm调优最佳参数(仅供参考)

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

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

相关文章

图像处理:均值滤波算法

目录 前言 概念介绍 基本原理 Opencv实现中值滤波 Python手写实现均值滤波 参考文章 前言 在此之前,我曾在此篇中推导过图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)。这在此基础上,我想更深入地研…

使用状态机实现幂等性

文章目录 背景幂等概念适用场景示例代码上述代码状态流转 背景 在某些场景下,可以使用状态机来实现幂等性。将业务流程抽象为一个状态机,定义各个状态之间的转换规则。当收到一个请求时,根据当前状态和请求类型来判断是否允许执行操作&#x…

数学知识四

容斥原理 S表示面积,下面公式可求出不相交的面积 2个圆的公式是这样 4个圆的面积是 总面积-所有俩俩相交的面积所有三三相交的面积-四四相交的面积,公式里加和减互相出现。 从n个集合里面挑一个一直到从n个集合里面挑n个 1-10中,能被2&#x…

【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

文章目录 一、Spring-Boot单元测试(了解)1.1 概念1.2 单元测试引用1.3 单元测试的实现1.4 简单的断言说明1.5 单元测试优点 二、Mybatis 增,删,改 操作2.1 增加⽤户操作2.2 修改⽤户操作2.3 删除⽤户操作 一、Spring-Boot单元测试(了解) 1.1 概念 单元测…

645. 错误的集合|||697. 数组的度|||448. 找到所有数组中消失的数字

645. 错误的集合 题目 集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的…

教你轻松申请Azure OpenAI

Azure OpenAI 和 OpenAI 官方提供的服务基本是一致的,但是目前前者还是处于预览版的状态,一些功能还没有完全开放。 优点: 不受地域限制,国内可以直接调用。可以自己上传训练数据进行训练(据说很贵)。Azu…

Cloud Kernel SIG月度动态:发布 Anolis 8.8 镜像、kABI 社区共建流程

Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 Anolis 8.8 镜像发布,默认搭载 ANCK 5.10-013 版本。 Anolis 23 滚动内核更新至…

Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序

文章目录 基础知识-Windows下版本控制器(SVN)3、Subversion 安装与配置3.1 验证是否安装成功。3.2 配置版本库3.3 启动服务器端程序 基础知识-Windows下版本控制器(SVN) 3、Subversion 安装与配置 TortoiseSVN安装与配置网上资料太多了,这里就不阐述了。 3.1 验证是…

【Java代码】MP3、flac歌曲批量生成同名的“xxx.lrc”歌词文件导入索尼黑砖二代

目录 1、准备条件2、实现方式3、代码环境和maven依赖4、Java代码5、示例1结果6、示例2结果7、一个小问题8、“音乐标签”下载地址 1、准备条件 网易云下载的MP3、flac后缀的歌曲若干首(ncm后缀的歌曲需要还原格式,不然会随着VIP过期而无法听&#xff09…

【原理图专题】案例:从集成的电平转换芯片换成三极管分立电平转换怎么就报异常

本案例是一个已经小批量量产的设备,不是我测试出来的,但是也算是我之前一手造成的,因为原理图这部分是我修改的。 异常发现最近生产的整机有部分非接读卡时无法控制到蜂鸣器发声音。我们的设计是这样的,有两个MCU互相通信,一个MCU是控制蜂鸣器的,另一个MCU通过SPI与非接芯…

银行数字化转型导师坚鹏:银行业务数字化创新工作坊

银行业务数字化创新工作坊 课程背景: 很多银行存在以下问题: 不清楚如何进行业务数字化创新? 不知道如何开展银行数字化营销工作? 不知道零售业务数字化创新成功案例? 学员收获: 学习原创银行BLM…

docker容器内的应用利用k8s configmap做配置中心

ConfigMap 能带来什么好处? 传统的应用服务都有自己的配置文件,各自配置文件存储在服务所在节点。如果配置出现变更,就需要对应节点的配置文件。Kubernetes 利用了 Volume 功能,完整设计了一套配置中心,其核心对象就是…

阳光万里,祝你上岸——免统考在职研究生

什么是在职研究生 在职研究生,是国家计划内,以在职人员身份,部分时间在职工作,部分时间在校学习的研究生教育的一种类型。在职攻读硕士方式有三种: 1.双证非全日制研究生:为普通高等教育研究生学历&#x…

Android OpenGL 渲染相机预览画面显示体系

OpenGL能进行高效得渲染图形图像,并支持各种复杂的特效和动画。 而在 Android 当中,运用的是OpenGL ES,它是OpenGL的一个轻量级版本,专门用于在移动设备、游戏控制台、嵌入式系统等嵌入式环境中使用。 它可以做相机滤镜或者图片…

seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库

seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库 大纲 1 单机搭建2 集群搭建 由于项目中的dubbo版本为2.6.0 故客户端程序(TM RM)使用seata-all 1.4.2 ,服务端(TC)使用seata-server-1.6.0.zip …

MIT6.S081操作系统实验2021(xv6系统)——lab1 Xv6 and Unix utilities

MIT6.S081操作系统实验2021——lab1 参考文章 sleep 要求为xv6实现UNIX 程序sleep;其应该暂停用户指定的ticks number。tick是 xv6 内核定义的时间概念,即计时器芯片的两次中断之间的时间(两次时钟中断之间的时间)。您的解决方…

关于函数栈帧的创建与销毁和可变参数列表

目录 1. 深刻理解函数调用过程1.1 基本概念1.2 函数栈帧的创建于销毁1.2.1 栈帧创建1.2.2 栈帧销毁1.2.3 有趣的现象 2. 了解可变参数列表的使用与原理2.1 可变参数列表与函数栈帧的关系2.2 宏的工作过程2.3 宏的具体实现原理 1. 深刻理解函数调用过程 1.1 基本概念 关于函数…

【MySQL】(7)复合查询

文章目录 单表查询回顾与练习多表查询自连接多行子查询(单列)in 运算符all 关键字any 关键字 多列子查询from 子句中的子查询合并查询 单表查询回顾与练习 注:下面的依旧基于 scott 数据库 MariaDB [scott]> select * from emp; -------…

ASEMI代理ADG736BRMZ-REEL7原装ADI车规级ADG736BRMZ-REEL7

编辑:ll ASEMI代理ADG736BRMZ-REEL7原装ADI车规级ADG736BRMZ-REEL7 型号:ADG736BRMZ-REEL7 品牌:ADI /亚德诺 封装:MSOP-10 批号:2023 安装类型:表面贴装型 引脚数量:10 类型&#xff1…

Mybatis框架超详解及运用总结

Mybatis 一、什么是Mybatils?二、第一个Mybatils程序2.1、创建springboot工程2.2、准备数据2.3、配置MyBatis2.4、编写SQL语句2.5、单元测试 三、JDBC四、数据库连接池五、lombok六、Mybatis基础操作6.1、删除6.2、新增6.2.1、主键返回 6.3、修改6.4、查询6.4.1、数…