JVM-JVM调优基础(理论)

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

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.mzph.cn/news/689666.shtml

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

相关文章

【正点原子STM32连载】 第五十章 手写识别实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第五…

lazada、速卖通卖家如何掌握自养号测评技巧打造高评价产品?

做跨境电商卖家都知道,国外的买家购物比较理性,也喜欢货比三家,所以店铺想要留住客户,就需要一些优质的产品来吸引他们。产品评价是卖家获取买家信任的重要途径,评价越高的产品,销量也就越好。 尤其是 Shop…

机器人常用传感器分类及一般性要求

机器人传感器的分类 传感技术是先进机器人的三大要素(感知、决策和动作)之一。根据用途不同,机器人传感器可以分为两大类:用于检测机器人自身状态的内部传感器和用于检测机器人相关环境参数的外部传感器。 内部传感器 内部传感…

CrossOver 24.0 让Mac可以运行Windows程序的工具

CrossOver 24.0最新版重点添加了对 DirectX 12 支持,从而在 Mac 上更好地模拟运行 Windows 游戏,开发者在 CrossOver 23 中可以调用 DirectX 12,在模拟游戏的过程中同时调用所有 GPU 核心,从而实现更优秀的渲染效果。 目前CrossOv…

CORROSION: 1

本机 192.168.223.128目标机 192.168.223.148 主机发现 nmap -sP 192.168.223.0/24 端口扫描 ​nmap -sV -p- -A 192.168.223.148开启了22 80 端口 看web,是个apache默认界面 扫目录 gobuster dir -u http://192.168.223.148 -x html,txt,php,bak --wordlist…

推送开权引导的技术内幕

人人都讨厌代码腐化,人人都在腐化代码!本文介绍app消息推送开权提醒能力的服务端实现,并说明如何通过手搓一个简易的流程引擎来实现横向的业务场景隔离,纵向的业务流程编排,从而灵活支持业务需求,抑制代码腐…

曲线生成 | 图解B样条曲线生成原理(基本概念与节点生成算法)

目录 0 专栏介绍1 什么是B样条曲线?2 基函数的de Boor递推式3 B样条曲线基本概念图解4 节点生成公式 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等)…

java以及android类加载机制

类加载机制 一、Java类加载机制 java中,每一个类或者接口,在编译后,都会生成一个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中并对数据进行校验,解析和初始化。最终,每一个类都会在方…

OpenAI:Sora视频生成模型技术报告(中文)

概述 视频生成模型作为世界模拟器 我们探索视频数据生成模型的大规模训练。具体来说,我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用transformer架构,在视频和图像潜在代码的时空补丁上运行。我们最大的模型Sor…

Springboot+vue的物流管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的物流管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的物流管理系统,采用M(model)…

用163邮箱或者outlook接收国科大邮箱的邮件

使用如图下路径,创建一个新的密码,用于在163大师邮箱或者outlook登录即可 如果不行,则需要手动配置邮箱服务器 参考网址:中国科学院邮件系统帮助中心

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096

使用centos安装,注意安装之前,保证系统可以联网,然后执行yum update 先去更新一下系统,可以省掉很多麻烦 20240219_150031 这里我们使用centos系统吧,使用习惯了. ChatGlm首先需要一台个人计算机,或者服务器, 要的算力,训练最多,微调次之,推理需要算力最少 其实很多都支持C…

借助Aspose.BarCode条码控件,C# 中的文本转 QR 码生成器

二维码用于在较小的空间内存储大量数据。它们易于使用,可以通过智能手机或其他设备扫描来打开网站、观看视频或访问其他编码信息。在这篇博文中,我们将学习如何使用 C# 以编程方式生成基于文本的 QR 码。我们将提供分步指南和代码片段,帮助您…

嵌入式学习 Day20

一. 标准IO和文件IO的区别: 1.标准IO是库函数,是对系统调用的封装 2.文件IO是系统调用,是Linux内核中的函数接口 3.标准IO是有缓存的 4.文件IO是没有缓存的 IO: b c d - 标准IO l s p 二. 文件IO: 1.操作步骤: …

AlexNet的出现推动深度学习的巨大发展

尽管AlexNet(2012)的代码只比LeNet(1998)多出几行,但学术界花了很多年才接受深度学习这一概念,并应用其出色的实验结果。 AlexNet(由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton共同设计…

OpenAI 发布文生视频Sora大模型,一句话便可生成长达一分钟的视频

前几期的文章,我们介绍了很多文生视频的大模型,包括字节发布的magic video以及stable video diffusion等模型,都可以输入相关的文本生成对应场景的视频。 文生视频大模型必然会成为各个人工智能大厂竞争的核心领地,这不OpenAI刚刚…

什么是接口测试?怎么做接口测试?

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 首先,什么是接口呢? 接口一般来说有两种…

Python Flask高级编程之RESTFul API前后端分离(学习笔记)

Flask-RESTful是一个强大的Python库,用于构建RESTful APIs。它建立在Flask框架之上,提供了一套简单易用的工具,可以帮助你快速地创建API接口。Flask-RESTful遵循REST原则,支持常见的HTTP请求方法,如GET、POST、PUT和DE…

单机环境搭建Redis伪集群

1、Redis版本 [rootwsdhla ~]# redis-server -v Redis server v6.2.6 sha00000000:0 mallocjemalloc-5.1.0 bits64 buildbf23dac15dfc00fa[rootwsdhla ~]# redis-cli -v redis-cli 6.2.62、创建节点目录 创建6个节点目录,分别复制一份redis.conf并编辑&#xff1a…

Codeforces Round 927 (Div. 3)(A,B,C,D,E,F,G)

这场简单些,E题是个推结论的数学题,沾点高精的思想。F是个需要些预处理的DP,G题是用exgcd算边权的堆优化dijkstra。C题有点骗,硬啃很难做。 A Thorns and Coins 题意: 在你的电脑宇宙之旅中,你偶然发现了…