JVM参数类型
一:标准参数 -
所有的JVM实现都必须实现这些参数的功能,而且向后兼容
例:
-help
-server -client
-version -showversion
-cp -classpath
二:非标准参数 -X
非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容
例:
-Xint : 解释执行
-Xcomp:第一次使用就编译成本地代码
-Xmixed: 混合模式,JVM自己来决定是否编译成本地代码
三:非(stable)稳定参数 -XX
此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用
例:
堆设置:
-Xms1g 设置初始堆大小
-Xmx4g 设置最大堆大小
-XX:NewRatio=n 设置新生代和老年代比例
-XX:SurvivorRatio=n 设置新生代 eden和Survivor比例
-Xmn1g 设置新生代大小,(eden+ 2 survivor space,设置后NewSize和MaxNewSize是一样的,可以不用再NewSize和MaxNewSize)
-XX:NewSize=2560M 设置新生代初始大小
-XX:MaxNewSize=2560M 设置新生代最大值
-XX:ParallelGCThreads=8 设置GC线程数量,(调整大小会改变jvm吞吐量和停顿时长)
-XX:NewRatio=4 设置新生代和老年代比例(如4 表示1:4)
-XX:SurvivorRatio=8 设置新生代eden和survivor区比例
##-xx:PermSize=100m 设置永久代初始化大小(java8之后,取消了永久代)
##-XX:MaxPermSize=256m 设置永久代最大值(java8之后,取消了永久代)
-XX:MaxMetaspaceSize=512M 设置元空间最大大小
-XX:MetaspaceSize=20M 设置元空间默认大小 (调整元空间的大小需要fullGC操作,如果应用在启动的时候发生大量fullGC,可能是由于启动过程中元空间大小发生了变化)
JVM常用命令行工具
jps (java process Status Tool)
命令格式:
jps [options] [hostid]
options选项:
-l : 显示进程id,显示主类全名或jar路径
-q : 显示进程id
-m : 显示进程id, 显示JVM启动时传递给main()的参数
-v : 显示进程id,显示JVM启动时显示指定的JVM参数
hostid选项
服务器ip
例: jps -v查看jvm参数
jinfo(Configuration Info for Java)
jinfo [option] <pid>
- no options 输出所有的系统属性和参数
- -flag 打印指定名称的参数
- -flag [+|-] 打开或关闭参数
- -flag = 设置参数
- -flags 打印所有参数
- -sysprops 打印系统配置
例:jinfo -flags 29
jstat
jstat [option] VMID [interval] [count ]
jstat命令用于查看JVM运行时的状态信息,包括内存状态、垃圾回收等。
option参数解释:
-class class loader的行为统计
-compiler HotSpt JIT编译器行为统计
-gc 垃圾回收堆的行为统计
-gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计
-gcutil 垃圾回收统计概述
-gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
-gcnew 新生代行为统计
-gcnewcapacity 新生代与其相应的内存空间的统计
-gcold 年老代和永生代行为统计
-gcoldcapacity 年老代行为统计
-printcompilation HotSpot编译方法统计
例:jstat -gc 29
其中
S0C survivor0大小
S1C survivor1大小
S0U survivor0已使用大小
S1U survivor1已使用大小
EC Eden区大小
EU Eden区已使用大小
OC 老年代大小
OU 老年代已使用大小
MC 方法区大小
MU 方法区已使用大小
CCSC 压缩类空间大小
CCSU 压缩类空间已使用大小
YGC 年轻代垃圾回收次数
YGCT 年轻代垃圾回收消耗时间
FGC Full GC垃圾回收次数
FGCT Full GC垃圾回收消耗时间
GCT 垃圾回收消耗总时间
jstack
jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的core文件中的stack信息。
jstack [options]
-F 当使用jstack 无响应时,强制输出线程堆栈;
-m 同时输出java堆栈和c/c++堆栈信息(混合模式);
-l 除了输出堆栈信息外,还显示关于锁的附加信息。
jmap(JVM Memory Map)
获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。
通常在fullgc可通过此命令dump出堆文件进行分析
jmap -dump:live,format=b,file=${out} ${pid} dump堆文件
例:jmap -dump:live,format=b,file=/data/share/202305/17/heap.hprof 29