JVM-JVM调优基础(理论)

news2025/1/21 15:38:23

申明:文章内容是本人学习极客时间课程所写,作为笔记进行记录,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。
原资料地址:课程资料

JVM参数

标准参数

定义:稳定的参数不会随着Java版本的变化而变化。通常以 短横线开头,可以通过java -help 查看

java -version

在这里插入图片描述

非标准参数

定义:以-X开头,是标准参数的扩展。表示在将来的JVM版本中可能会发生改变,但是这类以-X开始的参数变化比较小。通过java -X 查看
在这里插入图片描述
比较常见的非标准参数:

  1. -Xms堆最小值:默认值是总内存/64(且小于1G),默认情况下,当堆中可用内存小于40%(-XX: MinHeapFreeRatio调整)时,堆内存会开始增加,一直增加到-Xmx大小。
  2. -Xmx堆最大值:默认值是总内存/64(且小于1G),如果Xms和Xmx都不设置,则两者大小会相同,默认情况下,当堆中可用内存大于70%时,堆内存会开始减少,一直减小到-Xms的大小;
  3. -Xmn新生代内存:默认是整堆的1/3,包括Eden区和两个Survivor区的总和,写法如: -Xmn1024,-Xmn1024k,-Xmn1024m,-Xmn1g 。新生代按整堆的比例分配,所以,此值不建议设置!
  4. -Xss线程栈内存:默认1M,一般来说是不需要改的。
  5. 打印GC日志·-Xloggc:file与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中。
不稳定参数

这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于JVM调优和debug。
不稳定参数以-XX 开头,此类参数的设置很容易引起JVM 性能上的差异,使JVM存在极大的不稳定性。如果此类参数设置合理将大大提高JVM的性能及稳定性。
不稳定参数分为三类:

  • 性能参数:用于JVM的性能调优和内存分配控制,如内存大小的设置;
  • 行为参数:用于改变JVM的基础行为,如GC的方式和算法的选择;
  • 调试参数:用于监控、打印、输出jvm的信息;

不稳定参数语法规则:

  1. 布尔类型参数值:
    -XX:+
    '+'表示启用该选项
    -XX:-
    '-'表示关闭该选项
    示例:-XX:+UseG1GC:表示启用G1垃圾收集器
  2. 数字类型参数值:
    -XX:
    =给选项设置一个数字类型值,可跟随单位,例如:'m’或’M’表示兆字节;'k’或’K’千字节;'g’或’G’千兆字节。32K与32768是相同大小的。
    示例:-XX:MaxGCPauseMillis=500 :表示设置GC的最大停顿时间是500ms
  3. 字符串类型参数值:
    -XX:
    =给选项设置一个字符串类型值,通常用于指定一个文件、路径或一系列命令列表。
    示例:-XX:HeapDumpPath=./dump.core
    常用的不稳定参数:
    -XX:+UseSerialGC 配置串行收集器
    -XX:+UseParallelGC 配置PS并行收集器
    -XX:+UseParallelOldGC 配置PO并行收集器
    -XX:+UseParNewGC 配置ParNew并行收集器
    -XX:+UseConcMarkSweepGC 配置CMS并行收集器
    -XX:+UseG1GC 配置G1并行收集器
    -XX:+PrintGCDetails 配置开启GC日志打印
    -XX:+PrintGCTimeStamps 配置开启打印GC时间戳
    -XX:+PrintGCDateStamps 配置开启打印GC日期
    -XX:+PrintHeapAtGC 配置开启在GC时,打印堆内存信息

什么时候进行JVM调优?

  1. 系统吞吐量下降与响应延迟(P99);
  2. Heap内存(老年代)持续上涨至出现OOM;
  3. Full GC 次数频繁;
  4. GC 停顿过长(超过1秒);
  5. 应用出现OutOfMemory 等内存异常;
  6. 应用中有使用本地缓存且占用大量内存空间;

调优调什么?
内存分配 + 垃圾回收

  • 合理使用堆内存
  • GC高效回收占用的内存的垃圾对象
  • GC高效释放掉内存空间

JVM实践调优主要步骤
第一步:监控分析GC日志
第二步:判断JVM问题:
如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化
如果GC时间超过1秒,或者频繁GC,则必须优化。
第三步:确定调优目标
第四步:调整参数
调优一般是从满足程序的内存使用需求开始,之后是时间延迟需求,最后才是吞吐量要求,要基于这个步骤来不断优化,每一个步骤都是进行下一步的基础,不可逆行之。
第五步:对比调优前后差距
第六步:重复:1、2、3、4、5步骤
找到最佳JVM参数设置
第七步:应用JVM参数到应用服务器:
找到最合适的参数,将这些参数灰度发布一部分机器,观察一段时间。
如果,观察结果可以验证方案的价值,则进行全量发布!

这是一些调优的基础知识和方法论,真正的能够调优还是要结合实际情况去练习,后续会单独写文章来记录调优的案例。

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

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

相关文章

人工智能学习与实训笔记(十五):Scikit-learn库的基础与使用

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、介绍 1. 1 Scikit-learn的发展历程及定义 1.2 理解算法包、算法库及算法框架之间的区别和联系 二、Scikit-learn官网结构 三、安装与设置 3.1 Python环境的安装与配置 3.2 Scikit-lea…

如何实现批量获取电商数据自动化商品采集?如何利用电商数据API实现业务增长?

随着电子商务的快速发展,数据已经成为了电商行业最重要的资产之一。在这个数据驱动的时代,电商数据API(应用程序接口)的作用日益凸显。通过电商数据API,商家能够获取到大量关于消费者行为、产品表现、市场趋势等有价值…

模拟电子技术——基本微积分运算电路、滤波器、一阶低通滤波器、一阶高通滤波器、电压比较器、滞回比较器

文章目录 一、基本微积分运算电路什么是微积分电路电路及特点及参数计算-积分电路电路及特点及参数计算-微分电路 二、滤波器什么是滤波器滤波器分类有源无源的电路结构区别通带与阻带参数 三、一阶低通滤波器什么是一阶低通滤波器低通滤波器特性电路及相关特性 四、一阶高通滤…

【笔记------STM32】MX_RTC_Init()初始化RTC时RTC_ISR_INITF位超时失败的解决方法

RTC和flash有点像,有些功能需要解锁才能配置,虽然cubeMX生成的RTC部分的解锁配置正确,但却没有配置好前提条件:关闭PWR模块的备份域写保护使能,有点奇怪,手动关掉就好了 现象:进入RTC_EnterInit…

打开ps显示找不到dll怎么办?这四种方法可快速修复

在计算机操作系统中,当执行某程序或运行特定软件时,如果系统提示“ps显示找不到dll文件”,这其实是一个较为常见的问题现象。动态链接库(DLL)文件是Windows操作系统中不可或缺的重要组件,它包含了大量可被多…

Spring Boot 笔记 024 登录页面

1.1 登录接口 //导入request.js请求工具 import request from /utils/request.js//提供调用注册接口的函数 export const userRegisterService (registerData)>{//借助于UrlSearchParams完成传递const params new URLSearchParams()for(let key in registerData){params.a…

【Git】 大厂代码提交原则(适用新手,细节拉满)

目录 git是什么,为什么要学git 开发目录 提交到github/gitee的命令 提交代码时的注意事项 git 的其他命令 git是什么,为什么要学git git 是一个免费的、开源的分布式版本控制系统,git可以追踪文件的修改历史,并且在不同的人员…

Sora 文生视频提示词实例集 2

Prompt: Historical footage of California during the gold rush. 加利福尼亚淘金热期间的历史影像。 Prompt: A close up view of a glass sphere that has a zen garden within it. There is a small dwarf in the sphere who is raking the zen garden and creating patter…

Vue+Vite项目初建(axios+Unocss+iconify)

一. 创建项目 npx --package vue/cli vue 项目成功启动后,进入http://localhost:3200,即可进入创建好的页面(假设启动端口为3200) 二. 测试网络通讯模块 假设有本地服务器地址localhost:8000提供接口服务,接口为localhost:8000/token&#…

CCF-A类VLDB’24 3月1日截稿!数据界的璀璨盛会等你投稿!

会议之眼 快讯 第50届VLDB( International Conference on Very Large Databases)即超大型数据库国际会议将于 2024 年 8月25日至29日在中国广州朗廷广场隆重举行!VLDB大会是数据库领域的顶级学术盛会,而SIGMOD和ICDE则是与之齐名的另外两大数据库会议。这…

天锐绿盾 | 办公终端文件数据\资料防泄密软件

天锐绿盾是一款电脑文件防泄密软件,旨在帮助企业保护其敏感数据免受未经授权的访问和泄露。该软件采用先进的加密技术和文件监控机制,确保企业数据在存储、传输和使用过程中的安全性。 PC地址:https://isite.baidu.com/site/wjz012xr/2eae091…

Docker打包离线镜像到本地,上传解压到服务器

在我们部署Docker镜像时,难免会遇到服务器没有网络情况,Centos7离线安装Docker 这篇文章中,我们已经离线安装Docker完成,现在需要离线创建容器。 1 查看所有镜像 docker images注:如果我们想打包本服务器没有的镜像&…

v62.数组

1.简单介绍 就像数据可以存放在变量中,每个变量有名字、类型、以及内存空间。还可以用数组来保存 相同数据类型 的数据。 那么就避免了使用很多个独立的变量。数组是长度固定的数据结构,用来存放指定类型的数据。 2.初试数组 int num1,num2,num3...类…

第三百五十二回

文章目录 1. 概念介绍2. 获取方法3. 示例代码4. 对比与总结4.1 横向对比4.2 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容,本章回中将介绍如何获取当前时区.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们使用的…

09_Java集合

一、Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态…

城市管网可视化泄露检测系统

行业背景 目前传统的漏水检测模式存在的缺陷主要体现在以下几方面: 首先是检测灵敏度低,且不稳定。听音检测主要依赖人对声音的强度和频率的感觉,只能是定性的,且不同人的听觉能力不同,相同人在不同时间听觉效果也不…

芋道---实现可退回至申请人节点(附完整代码)

现有如下需求,审批人在退回申请时,想退回至申请人节点,但目前芋道并不支持退回至申请人节点,现做如下修改,实现该需求: 步骤一:设计流程模型 首先,我们在设计流程模型时&#xff0c…

Java并发基础:ConcurrentSkipListMap全面解析

内容概要 ConcurrentSkipListMap类它融合了跳表的高效查找与并发控制的稳定性,在多线程环境下,该类提供了出色的线程安全性能,确保数据的一致性与完整性,其操作具有对数级别的时间复杂度,即使在大数据集下也能维持高效…

《UE5_C++多人TPS完整教程》学习笔记18 ——《P19(实现子系统函数)创建会话(Create Session)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P19 (使用子系统函数)创建会话(Create Session)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&am…

【Linux操作系统】:Linux进程概念(1)

目录 冯诺依曼体系结构 操作系统 操作系统的概念(是什么) 操作系统的目的(为什么) 如何理解管理 (怎么做) 操作系统总结 系统调用和库函数概念 进程 基本概念 描述进程-PCB task_struct-PCB的一…