引言
一个偶然的机会,让我决定深入了解下JVM调优。这个机会等我有机会再说。
JVM参数分类
- 标准参数,例如-help、-server、-client、-version、-showversion、-cp、-classpath等相对稳定的命令。
- X参数,它是非标准化参数。在各个版本的JVM中可能会有变化,但是变化比较小。例如-Xint:解释执行。-Xcomp:第一次使用就编译成本地代码。-Xmixed:混合模式,JVM自己来决定是否编译成本地代码。
- XX参数,它是非标准化参数,相对不稳定主要用于JVM调优和Debug。XX参数又分为布尔类型 比如:-XX:[±]< name > 表示启用或者禁用某个属性。非布尔类型,类似于key-value类型,比如:
-XX:< name >=< value > 表示设置了某个值。
注意:-Xms -Xmx 等实际上是-XX属性的缩写,所以是XX参数。
-Xms 等价于 -XX:InitialHeapSize -Xmx 等价于 -XX:MaxHeapSize
查看JVM运行时参数
- -XX:+PrintFlagslnitial 查看初始值
- -XX:+printFlagFinal 查看结束值(初始值被修改后就可以通过这个命令来查看)
- -XX:+UnlockExperimentalVMOptions 解锁实现参数
- -XX:+UnlockDiagnosticVMOptions 解锁诊断参数
- -XX:+PrintCommandLineFlags 打印命令行参数
一般使用方法是 java -XX:+PrintFlagslnitial -version
打印出来的结果有= 或者:=的 其中=表示初始默认 :=表示后来更改的。
JDK自带的工具介绍
- jps(java process status)
作用:用来查看所有的jvm进程,包括进程ID,进程启动的路径等。
jps [ options ] [ hostid ]
-q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null
-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
-v 输出传递给JVM的参数
常用的是 jps -l 可以替代ps -ef|grep java - jinfo
作用:负责观察进程运行环境参数,包括Java System属性和JVM命令行参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息
jinfo [ option ] pid
no option 打印命令行参数和系统属性
-flags 打印命令行参数
-sysprops 打印系统属性
-h 帮助 - jstat 查看JVM统计信息(类加载信息,垃圾回收信息,JIT编译信息等)
jinfo [ option ] pid
-class 类加载信息
-compiler JIT编译信息
-gc 垃圾回收信息
GC的输出结果:
S0C,S1C,S0U,S1U:S0和S1的总量和使用量
EC,EU:EDEN区的总量与使用量
OC,OU:OLD区的总量与使用量
MC,MU:Metaspace区的总量与使用量
CCSC,CCSU:压缩类空间总量与使用量
YGC,YGCT:YoungGC的次数和时间
FGC,FGCT:FULLGC的次数和时间
GCT:总的GC时间
常用的是 jstat -gc 进程号 1000 10 表示 查看GC收集信息每1秒打印一次,一共打印10次
总结
这些最好在VM虚拟机上能够做一下,查看下命令的用途,加深一下印象。xia
作者:select you from me
来源:CSDN
转载请联系作者获得授权并注明出处。