这篇我们来分析下JVM中自带的一些命令分析工具。
通过其能看到系统中所有的HotSpot虚拟机进程,通个其就能看到当前正在进行的Main
类。
实首先我们通过jps -help
来看下:
前面的usage
就是其的用法,可以看到其的初始是分为-q
&mlvV
,这个的意义按正则表达式理解,也就是这两个以及后面的那些参数是能混合使用的。这里我们先运行我们的MyJvm
类。
我们首先输入jps
命令来看下:
这里就能看到我们的MyJvm
运行的pid
即为15932
。
可以看到这个-q
的参数是简化,只显示pid
。
这个参数是展示在启动Main的时候传入的程序参数:
这个我们可以,其不只是简单的展示Main
类的名称,还会将其的包名也带上。
这个命令就是JVM相关的参数
这个参数应该就是不输入默认带的,可以看到其与直接输入jps
是一样的
我们将这些参数一起使用,就能看到详细信息
这个是用来监视虚拟机的各种状态的,例如垃圾收集、内存等。
jstat -help
这里vmid
就是pid
(必选<>
),后面的interval
是间隔,也就是间隔多久打印一次、count
是打印的次数
我们输入jstat -class 17660
:
可以看到这里有展示加载的类数量&占有的字节数、卸载的类。
1000
1000 我们看一个比较贴心的参数-h
&n
,间隔多久打印表头:
1000 这个就是展示JVM关于GC相关的一些内容。首先我们来分析头部的字段意义:首先是最后面的C
&U
,其中C
表示是总容量。例如S0C
就表示S0
区的容量,然后S0U
表示S0
去已经使用的容量。
然后我们来分析前缀:S0
-S0
区、S1
-S1
区、E
-eden
区、0
-old
区、M
-方法区
、CCS
-压缩类空间
、YGC
-年轻代发生GC的次数
、YGCT
-年轻代发生GC的时间
、FGC
-Full GC发生的次数
、FGCT
-Full GC发生的次数
、GCT
-垃圾回收的总时间
。
1000 这个gcutil
是用来展示每个区的空间占比的。
100 这个我们可以看到就多了导致GC的原因,其中LGCC
就是表示最后一次发生GC的原因,GCC
就是表示当前GC的原因。
500 这个我们加了参数-t
其表示当前JVM已经启动了多长时间。
用于查看&修改JVM的选项配置。
这里是基本的使用介绍,下面我们来看下其的具体使用
我们使用-Xlog:gc* -Xmx120M -Xms120M -XX:+UseParallelGC -XX:+PrintFlagsFinal
运行
这个就是查看被设置的JVM选项。
这个是选择具体的某个选项获取其的key-value
& jinfo -flag =
这个就是设置一个布尔选项是使用还是不使用,或者一个值类型的选项的具体的值,注意,这个只有某些参数才能该。
只有manageable
类型的参数才能在运行的时候动态的注解修改
这个就是展示系统参数。
这个是分析JVM内存相关的内容
这个就是打印JVM中的实例对象,然后可以加:live
参数,表示只打印存活的对象。
导出堆使用情况的dump文件,其是二进制文件,不能直接阅读.
这是我们主动触发导出,但我们在前面文章也有介绍参数HeapDumpOnOutOfMemoryError
、HeapDumpPath
这个就是设置当发生OOM
的时候JVM自动导出dump
文件供我们分析,例如我们使用-Xlog:gc* -Xmx120M -Xms120M -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\err.bin -XX:+PrintFlagsFinal
。
这个dump
文件可以通过JProfile
或visualvm
这些工具分析。
jstack是查看线程栈信息,可以通过其查看是对有死锁。
我们输入jstack -l
查看:
这里就能看到我们当前的线程信息,例如当前的状态RUNNABLE
、然后synchronizers
锁持有相关的内容。
jcmd
能实现上面各种命令的功能,类似于万能钥匙。
直接输入类似与jmap
命令
help以这种方式,指定具体的JVM进程号,然后在追加选项参数。
VM.flags 这个就是打印JVM的运行选项参数。
GC.heap_info。