jvm认识与探究(五)jvm命令参数与工具

jvm参数官网参照:https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

一、jvm参数设置

jvm参数总的概括可分为三大类,分别是标准参数、-X参数、-XX参数,其中还有其他参数,对应在-XX参数中存在。
1.jvm标准参数

标准参数:每个JDK版本都拥有的参数。
-version 查看jdk版本
-help 查看命令帮助
-server server模式下启动
-jar 以jar包的方式启动应用程序

在这里插入图片描述

2.jvm非标准参数

非标准参数:-X参数,在不同JDK版本中可能出现变动,并且不向后兼容。
-Xint 解释执行,所有代码将直接执行不会编译成本地代码
-Xcomp 编译执行,第一次执行就编译成本地代码
-Xmixed 混合模式,jvm自己决定

在这里插入图片描述

3.jvm非稳定参数

非稳定参数:-XX参数,相对每个JDK版本最不稳定,使用最多,最要用户JVM调优。
Boolean类型:
格式:-XX:[±]name +或者-表示启用或者禁用name属性
例子:-XX:+UseG1GC 表示启用G1垃圾收集器
非Boolean类型:
格式:-XX:name=value 表示name属性的值赋值为value
比如:-XX:MaxHeapSize=10000 表示最大堆内存赋值为1000

其他参数:-XX参数的简写形式。
-Xms1000 相当于 -XX:InitialHeapSize=1000
-Xmx1000 相当于 -XX:MaxHeapSize=1000
-Xss100 相当于 -XX:ThreadStackSize=100

4.常用-XX参数设置

打印当前jdk版本所有-XX参数

java -XX:PrintFlagsFinal -version

在这里插入图片描述

=表示默认是,:=的参数值是已经被用户或jvm修改过后的值。

参数含义说明
-XX:CICompilerCount=3最大并行编译数如果设置大于1,虽然编译速度会提高,但是同样影响系统稳定性,会增加JVM崩溃的可能
-XX:InitialHeapSize=100M初始化堆大小简写-Xms100M
-XX:MaxHeapSize=100M最大堆大小简写-Xmx100M
-XX:NewSize=20M设置年轻代的大小
-XX:MaxNewSize=50M年轻代最大大小
-XX:OldSize=50M设置老年代大小
-XX:MetaspaceSize=50M设置方法区大小
-XX:MaxMetaspaceSize=50M方法区最大大小
-XX:+UseParallelGC使用UseParallelGC新生代,吞吐量优先
-XX:+UseParallelOldGC使用UseParallelOldGC老年代,吞吐量优先
-XX:+UseConcMarkSweepGC使用CMS老年代,停顿时间优先
-XX:+UseG1GC使用G1GC新生代,老年代,停顿时间优先
-XX:NewRatio新老生代的比值比如-XX:Ratio=4,则表示新生代:老年代=1:4,也就是新生代占整个堆内存的1/5
-XX:SurvivorRatio两个S区和Eden区的比值比如-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8,也就是一个S占整个新生代的1/10
-XX:+HeapDumpOnOutOfMemoryError启动堆内存溢出打印当JVM堆内存发生溢出时,也就是OOM,自动生成dump文件
-XX:HeapDumpPath=heap.hprof指定堆内存溢出打印目录表示在当前目录生成一个heap.hprof文件
-XX:+PrintGCDetails、XX:+PrintGCTimeStamps、XX:+PrintGCDateStamps打印出GC日志可以使用不同的垃圾收集器,对比查看GC情况
-Xloggc:$CATALINA_HOME/logs/gc.log指定日志输出路径
-Xss128k设置每个线程的堆栈大小经验值是3000-5000最佳
-XX:MaxTenuringThreshold提升年老代的最大临界值默认值为 15
-XX:InitiatingHeapOccupancyPercent启动并发GC周期时堆内存使用占比G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比. 值为 0 则表示”一直执行GC循环”. 默认值为 45.
-XX:G1HeapWastePercent允许的浪费堆空间的占比默认是10%,如果并发标记可回收的空间小于10%,则不会触发MixedGC。
-XX:MaxGCPauseMillis=200msG1最大停顿时间暂停时间不能太小,太小的话就会导致出现G1跟不上垃圾产生的速度。最终退化成Full GC。所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态。
-XX:ConcGCThreads=n并发垃圾收集器使用的线程数量默认值随JVM运行的平台不同而不同
-XX:G1MixedGCLiveThresholdPercent=65混合垃圾回收周期中要包括的旧区域设置
占用率阈值默认占用率为 65%
-XX:G1MixedGCCountTarget=8设置标记周期完成后,对存活数据上限为G1MixedGCLIveThresholdPercent 的旧区域执行混合垃圾回收的目标次数默认8次混合垃圾回收,混合回收的目标是要控制在此目标次数以内
XX:G1OldCSetRegionThresholdPercent=1描述Mixed GC时,Old Region被加入到
CSet中默认情况下,G1只把10%的Old Region加入到CSet中

二、常用命令工具

1.jps

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

jps是一个查看当前运行jvm应用程序的命令工具

在这里插入图片描述

2.jinfo

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jinfo.html

jinfo命令打印指定Java进程或核心文件或实时修改服务器的Java配置信息。

查看一个java应用程序曾经被赋值过的参数
jinfo -flags PID
查看一个java应用程序单个参数值
格式:jinfo -flag 参数名 PID
例子:jinfo -flag UseG1GC 18204

在这里插入图片描述

实时修改一个java应用程序的值,并且只有标记为manageable的参数可以实时修改
格式:jinfo -flags [±]参数名 PID
例子:jinfo -flags +UseG1GC 12345
格式:jinfo -flags 参数名=参数值 PID
例子:jinfo -flags NewRatio=2 12345

3.jstat

官网:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

jstat是一个查看jvm虚拟机性能统计信息的命令工具。

例如:查看gc信息,间隔1000毫秒共输出10次
jstat PID -gc 1000 10

在这里插入图片描述

4.jstack

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html

jstack是一个查看jvm虚拟机线程堆栈信息的命令工具。
jstack PID

在这里插入图片描述

该命令工具可用于排查死锁等cpu消耗过高等异常。

5.jmap

官网:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html

jmap命令用于打印指定进程、核心文件或远程调试服务器的共享对象内存映射或堆内存详细信息。

查看堆内存信息

jmap -heap PID

在这里插入图片描述
导出内存dump文件

jmap -dump:format=b,file=heap.hprof PID

在这里插入图片描述

在开发环境中加入-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof参数可以在内存溢出时自动导出dump文件

三、可视化工具

1.jconsole

官网:http://openjdk.java.net/tools/svc/jconsole/

jconsole工具是一个兼容于jmx的图形化工具,用于监视Java虚拟机。

安装java环境后就存在jconsle工具,执行命令打开

jconsole

在这里插入图片描述

2.jvisualvm

官网:http://openjdk.java.net/tools/svc/jconsole/

Java VisualVM是一个直观的图形用户界面,当Java技术应用程序(Java应用程序)在给定的Java虚拟机(JVM*)上运行时,它提供有关Java技术应用程序(Java应用程序)的详细信息。

安装java环境后就存在jvisualvm工具,执行命令打开

jvisualvm

在这里插入图片描述

3.Arthas

官网:https://github.com/alibaba/arthas

Arthas是一个由阿里巴巴开源的Java诊断工具,Arthas允许开发人员在不修改代码或重启服务器的情况下对Java应用程序的生产问题进行故障排除。

1.检查类是否已加载,或类正在加载的位置。(用于排除jar文件冲突)
2.对类进行反编译,以确保代码按预期运行。
3.查看类装入器的统计数据,例如类装入器的数量、每个类装入器装入的类的数量、类装入器的层次结构、可能的类装入器泄漏等。
4.查看方法调用细节,例如方法参数、返回对象、抛出异常等。
5.检查指定方法调用的堆栈跟踪。当开发人员想要知道上述方法的调用者时,这是非常有用的。
6.跟踪方法调用以查找慢速子调用。
7.监控方法调用统计数据,如qps、rt、成功率等。
8.监视系统指标、线程状态和cpu使用情况、gc统计信息等。
9.支持命令行交互模式,支持自动完成功能。
10.支持telnet和websocket,它支持使用命令行和浏览器进行本地和远程诊断。
11.支持分析器/火焰图
12.支持JDK 6 +。
13.支持Linux / Mac / Windows。

安装

curl -O https://alibaba.github.io/arthas/arthas-boot.jar

打印使用

java -jar arthas-boot.jar -h

官网用户使用手册:https://alibaba.github.io/arthas/en/

4.MAT

官网:http://www.eclipse.org/mat/

Memory Analyzer(MAT)是一个快速且功能丰富的Java堆分析器,它可以帮助您查找内存泄漏原因并减少内存消耗。

下载地址:https://www.eclipse.org/mat/downloads.php

根据上方命令得到得heap.hprof文件使用MAT分析内存情况

用户手册:https://www.vogella.com/tutorials/EclipseMemoryAnalyzer/article.html

5.gceasy

官网:http://gceasy.io

gceasy是一个在线GC日志分析工具

可根据在java运行环境设置参数得到gc日志文件进行在线分析

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:gc.log
5.GCViewer

官网:http://www.tagtraum.com/gcviewer.html

GCViewer是一个桌面应用程序GC日志分析工具

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值