zhaoyu@home:~$

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 --打印出堆内存的信息 jmap -clstats --打印出类加载统计 jmap -finalizerinfo --打印出等待回收中的对象信息 jmap -histo[:live] --打印出java对象的heap柱状图,live选项定义存活的对象。 jmap -dump: --dump java 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] --l,打印出锁的附加信息。 ```