当前位置:首页 > Java技术 > JVM参数分析、配置优化

JVM参数分析、配置优化

2022年09月16日 16:46:19Java技术4

1、JVM分析指令

1.1 jinfo—查看JVM配置参数

命令:

jinfo

功能:
1、查看正在运行的应用程序的JVM参数和系统参数。
2、动态修改正在运行的应用程序的JVM参数。
3、可以从core文件中,获取已经崩溃的应用程序的配置信息。

使用:

# 基本使用,pid可以通过jps查看
jinfo [options] pid
# 属性参数使用说明

# 打印系统属性
-sysprops
# 打印所有的VM参数
-flags
# 获取指定name属性值
-flag name
# 开启、关闭bool类型的属性
-flag [+/-]name
# 设置VM参数
-flag name=value
# 同时打印系统参数和VM参数
<no option>

实例:
JVM参数分析、配置优化 _ JavaClub全栈架构师技术笔记

1.2 jmap—查看JVM堆内存信息

命令:

jmap

功能:
1、查看堆使用的GC算法、配置信息和内存使用情况。
2、查看堆中对象的统计信息。
3、打印正等待回收的对象信息。
4、生成堆信息的快照文件,然后通过jhat以html的方式进行查看。

使用:

# 基本使用
jmap [option] <pid>

# 属性参数使用说明

# 打印堆信息
-heap
# 打印对象的[存活]统计信息
-histo[:live]
# 打印类加载信息
-clstats
# 打印正等待回收的对象信息[一般GC频繁时有数据]
-finalizerinfo
# 生成快照文件
-dump:live,format=b,file=fileName.bin <pid> # 使用jhat命名以html方式查看

实例:
JVM参数分析、配置优化 _ JavaClub全栈架构师技术笔记
JVM参数分析、配置优化 _ JavaClub全栈架构师技术笔记

1.3 jstat—查看JVM统计信息 (★)

命令:

jstat

功能:
查看虚拟机中的类装载、内存、垃圾回收、运行期编译等数据。

使用:

# 基本使用
jstat option <pid>
# 属性参数使用说明

# 打印类装载信息
-class
# 编译统计信息
-compiler
# 打印垃圾回收GC统计信息 - 最常用
-gc <pid> [time,num] # 表示每time毫秒查询一次统计信息,一共查询num次
# 内存占用大小和内存使用情况
-gccapacity
# 分代查询GC信息
-gcnew 或者 -gcnewcapacity :年轻代
-gcold 或者 -gcoldcapacity :老年代

实例:
JVM参数分析、配置优化 _ JavaClub全栈架构师技术笔记
-gc 垃圾回收GC统计信息统计信息 主要参数说明

# 内存参数,单位大小为kb
S0C S1C :新生代Survivor区大小
S0U S1U :新生代Survivor区已使用空间
EC :新生代Eden区大小
EU :新生代Eden区已使用空间
OC :老年代大小
OU :老年代已使用空间

# GC执行次数与耗时(秒)
YGC :YoungGC执行次数
YGCT :YoungGC执行时间
FGC :FullGC执行次数
FGCT :FullGC执行时间
GCT :程序启动到采用时,GC总耗时

JVM参数分析、配置优化 _ JavaClub全栈架构师技术笔记
-gccapacity GC内存使用情况 主要参数说明

# 内存信息参数,单位大小为kb
NGCMN :年轻代初始化容量
NGCMX :年轻代最大容量
NGC : 年轻代当前容量
OGCMN :老年代初始化容量
OGCMX :老年代最大容量
OGC : 老年代当前容量

JVM参数分析、配置优化 _ JavaClub全栈架构师技术笔记

2、频繁的GC

MinorGC与MajorGC:

原因:
当年轻代的内存空间不足时就会出现频繁的MinorGC,老年代不足时就会出现频繁的MajorGC。

影响:
​降低系统的响应速度。

注意:
增加MinorGC可能会增加单次MinorGC的时间,因为年轻代空间越大SurviorFrom区域的存活对象可能就越多,在从SurvivorFrom区域复制到SuvivorTo区域的耗时就越多,当Eden区增加一倍时,MinorGC的次数会减少一半。

​如果应用存在大量的短期对象,应该适当增加年轻代;如果存在大量的持久化对象,应该适当增加老年代。

FullGC
原因:
堆中分配了大对象,当老年代空间不足时,就会发生频繁的FullGC。

影响:
FullGC发生时进程会暂停响应,降低系统性能。

3、JVM配置推荐原则

默认原则:

空间 命令行(比如) 配置
-Xms1024M、-Xmx1024M 1/4机器内存
年轻代 -Xmn256M 3/8整堆大小
Eden与Survivor比列 -XX:SurvivorRatio=8 8
年轻代与老年代占比 -XX:NewRatio=2 如果配置了年轻代,则不需要该参数配置

优化原则:

空间 命令行(比如) 配置
-Xms1024M、-Xmx1024M 3~4倍FullGC后老年代占用量
年轻代 -Xmn256M 1-1.5倍FullGC后老年代占用量
Eden与Survivor比列 -XX:SurvivorRatio=8 8
年轻代与老年代占比 -XX:NewRatio=2 如果配置了年轻代,则不需要该参数配置

注意:老年代大小 = 堆大小 - 年轻代大小

4、常见VM设置参数

配置参数:

  • -Xms1g:设置虚拟机的初始内存,默认是物理内存的 1/64。
  • -Xmx1g:设置虚拟机的最大可用内存,默认是物理内存的 1/4。
  • -Xmn512m:设置新生代的大小。
  • -Xss1m:设置每个线程堆栈的大小,虚拟机的最小值限制为 160k,如果小于这个值将报错。
  • -XX:MetaspaceSize=128m:默认是21m,调整 MetaSpace 的大小。
  • -XX:NewRatio=2:设置新生代和老年代的比值,默认是2,即如果堆是300兆,则年轻代占100兆。
  • -XX:SurvivorRatio=8:设置新生代中 Eden 区与 Survivor 区的比值,默认为8,即 Eden 占 8 份,S1 占 1 份,S2 占 1 份。如果新生代时10M,则 Eden 区占 8 M,其余两个各占 1 M。
  • -XX:MetaspaceSize=100m 设置元空间大小,默认是21兆左右。

GC堆日志打印参数:

配置参数可以通过:jinfo -flag [+/-]name 动态设置

  • -XX:+PrintGC:打印简单的 GC 日志。
  • -XX:+PrintGCDetails:打印详细的 GC 日志。
  • -XX:+PrintGCTimeStamps :打印自虚拟机启动以来所经过的时间。
  • -XX:+PrintGCApplicationConcurrentTime :打印每次垃圾回收前,程序未中断的执行时间。
  • -XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。
  • -XX:+PrintHeapAtGC:在发生 GC 时打印出堆栈详情。
  • -Xloggc:log/gc.log:配置GC日志输出文件位置。

作者:一恍过去
来源链接:https://blog.csdn.net/zhuocailing3390/article/details/123594951

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/41957.html

分享给朋友:

“JVM参数分析、配置优化” 的相关文章

Java虚拟机1:什么是Java

Java虚拟机1:什么是Java

前言 让我们来看一下Java的广告词,来自http://www.java.com/zh_CN/about/: 97%的企业桌面运行Java 美国有89%的桌面(或计算机)运行Java 全球有900万Java开发人员 开发人员的头号选择...

jvm优化——运行参数篇

jvm优化——运行参数篇

在这篇文章中主要介绍jvm的一些运行参数 对jvm优化总结篇可以阅读:JVM优化——总结篇 1、jvm的运行参数 1.1、三种参数类型 jvm的参数类型分为三种,分别是: 1、标准参数: 标准参数的意思是说一般比较稳定,在以后jvm的版...

JVM学习1--数字存储,内存模型,指令重排

JVM学习1--数字存储,内存模型,指令重排

一、数字在计算机中的存储   整数:以补码形式存储。     补码:正数的补码是自身,负数的补码是取反码加1(取反码时符号位还是1)   浮点型:以float类型表示            注意一下,这八位指数实际上是(127...

深入理解JVM(1)——JVM内存模型

Java虚拟机的内存空间分为五个部分,分别是: 程序计数器; Java虚拟机栈 本地方法栈 堆 方法区 接下来对这五部分分别进行详细的介绍 1、程序计数器:   a)什么是程序计数器:程序计数器是内存中的一个很小...

JVM——JVM大厂面试问题与解答

JVM——JVM大厂面试问题与解答

摘要 本博文主要分享在JVM中的大厂面试问题。总结相关面试问题与yu解答。帮助大家更好的学习与理解JVM的原理。同时也是分享一些有关于JVM实战的经验,帮助大家在工作中排查错误。 一、JVM的内存模型 1.1 JVM1.8内存模型 1.2 JVM内存模型中...

JVM学习笔记1:Java虚拟机内存模型

JVM学习笔记1:Java虚拟机内存模型

JVM学习笔记1:Java虚拟机内存模型 学习JVM,Java虚拟机对理解Java程序执行过程和Java程序性能调优具有很大帮助。本系列博客旨在由浅到深学习并理解JVM。参考阅读:《深入理解Java虚拟机-JVM高级特性和最佳实践》。这个书写的非常好,推荐有条件的读者买一本来阅读...

jvm-java 内存模型  以及各个分区具体内容

jvm-java 内存模型 以及各个分区具体内容

java内存模型,这里其实是指 jvm运行时内存模型 1 每一个应用程序,都有一个JVM 而不是 多个应用程序,共享一个jvm 2 java源文件,首先通过编译器,把java语法的代码,编译成 jvm语法的字节码文件 这个过程,是不涉及到...

java jvm设置

2. 如何分配JVM内存设置: (1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效):     java -Xmx128m -Xms64m -Xmn32m -Xss16m Test     (2)当在集...

Java虚拟机5:Java垃圾回收(GC)机制详解

Java虚拟机5:Java垃圾回收(GC)机制详解

哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象? 1、引用计数法 这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失...

深入底层之JVM的运行原理和性能调优

深入底层之JVM的运行原理和性能调优

学海无涯  不进则退 如存在问题 或有更好建议 请联系 作者QQ:2940500   前言: 了解程序的运行原理 要先学会看字节码文件 然后这样才能真正的去看程序是怎么运行的  ,不是说在开发工具 里deb...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。