JVM调优与线上问题监控工具
首先命令行输入java -version,查看本机的Java版本信息以及JVM相关信息
可以看到的Java8,HotSpot虚拟机,Client模式启动,混合编译模式
XXX>java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) Client VM (build 25.251-b08, mixed mode)
JVM运行参数
JVM的运行参数总的来说可以分为三类:
标准参数:
- -help
- -version
- -server、-client
-server、-client 是设置JVM的运行模式的参数。JVM启动会根据硬件与操作系统自动选择运行模式:
- 32位系统如果是Windows,无论其余硬件配置如何,都默认client模式,其余操作系统如果是2G以上内存并且有2个以上CPU,默认是server模式启动。
- 64位操作系统默认server模式,不支持client
之前在做GC测试的时候也介绍过,这两种运行模式的区别在于:
- server模式启动时,堆空间可能默认大一点,JDK9以前默认是UseParallelGC,JDK9以后是UseG1GC。server模式启动慢,运行快
- client模式初始化堆空间小,默认是UseSerialGC。client模式下,JVM启动速度更快,但是运行速度慢
-X参数(非标准参数),不同JVM版本可能不同。可以在命令行使用java -X命令查看。
- -Xint、-Xcomp、-Xmixed,这三个参数是JVM启动时的编译模式,默认是mixed混合模式
-Xint:interpreted mode,解释器模式。编译与运行同时进行,在编译Java程序的时候一边编译一边执行,编译多少执行多少
-Xcomp:compile mode,编译模式。JVM在第一次使用时,会把所有的字节码编译成本地代码,即一次性编译完再使用,并且没有启用JIT编译器
-Xmixed:混合模式,解释器模式与编译模式混合使用,由JVM自己决定。
- …
-XX参数(非标准参数,使用频率较高),主要用于jvm调优与debug操作。-XX参数使用有两种方式:
-
一种是非boolean类型,即key-value
格式是-XX:key=value,如:
-XX:newRatio=1
-
一种是boolean类型
格式是-XX:[±],+表示启用,-表示禁用。如:
-XX:+UseSerialGC
JDK四个调优工具
jinfo
jinfo是JDK自带的查看JVM配置参数的工具。
查看所有的JVM配置参数:
jinfo -flags [pid]
如:
XXX> jinfo -flags 15628
Attaching to process ID 15628, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 25.251-b08
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:InitialHeapSize=16777216 -XX:+ManagementServer -XX:MaxHeapSize=268435456 -XX:MaxNewSize=89456640 -XX:MinHeapDeltaBytes=131072 -XX:NewSize=5570560 -XX:OldSize=11206656 -XX:TieredStopAtLevel=1 -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation
Command line: ....
如果只想查看单个:
jinfo -flag <name> [pid]
jstak
jstak命令可以查看编译统计,GC发生次数,以及加载的类数量。命令格式:
jstat -