jvm-自带的性能监控工具
jps
jps输出当前机器的java进程,用法如下:
jps [option]
option包括如下:
- -q 不输出类名、Jar名和传入main方法的参数
- -m 输出传入main方法的参数
- -l 输出main类或Jar的全限名
- -v 输出传入JVM的参数
常用用法如下:
jps -l jps -ml
jinfo
使用方式: ```shell script jinfo -flags pid
打印正在运行程序的jvm参数。
### jstat
jstat是jvm提供的统计工具,用于统计堆的使用情况及类加载和编译的情况
jstat 使用语法:
jstat -
* option 包括:
- class
- compiler
- gc
- gccapacity
- gccause
- gcmetacapacity
- gcnew
- gcnewcapacity
- gcold
- gcoldcapacity
- gcutil
- printcompilation
* vmid:虚拟机ID,通常为进程id。
* interval:统计的时间间隔,单位ms。
* count:统计的次数。
查看类加载情况
jstat -class pid
查看类编译情况
jstat -compiler pid
如下列命令对一个进程进行1次gc统计,间隔为1s。
jstat -gc 5112 1000 1
统计结果如下:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT
FGC FGCT GCT
4352.0 4352.0 2677.3 0.0 34944.0 31431.7 191976.0 119766.5 205372.0 194511.9 28064.0 25989.3 52 0.392
10 0.206 0.598
各参数释义如下:
* S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
* EC、EU:Eden区容量和使用量
* OC、OU:年老代容量和使用量
* MC、MU:方法区容量和使用量
* YGC、YGT:年轻代GC次数和GC耗时
* FGC、FGCT:Full GC次数和Full GC耗时
* GCT:GC总耗时
### jmap
jmap 用来查看堆内存信息,较jstat可以获得更详细的内容,如:内存使用情况的汇总,对内存溢出的定位和分析,使用语法如下:
jmap -heap
dump-options如下:
live –仅导出存活对象
format=b –binary format
file=
使用如下:
jmap -dump:live,format=b,file=E:\heap.bin 5112
dump出来的文件,我们可以使用,visualVM,或者jhat查看。jhat查看到命令如下:
jhat -port 9998 E:\heap.bin
如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存。但是jhat,hprof工具已经在java10以后取消了,推荐使用,visualVM等进行分析。
### jstack
jstack 打印出thread dump 信息,及线程等待信息,对于排查死锁很有帮助。使用方法如下:
jstack [-l]