JDK监控和故障处理工具(jps、jstat、jinfo、jmap、jhat和jstack)

JDK的命令行工具

名称 主要作用
jps JVM Process Status tool,显示指定系统内所有的HotSpot虚拟进程
jstat JVM Statistics Monitor tool,用于手机HotSpot虚拟机各方面的运行数据
jinfo Configuration Info for Java,显示虚拟机配置信息,可实时动态配置参数
jmap Memory Map for Java,生成虚拟机的内存转储快照(headdump文件)
jhat JVM Head Dump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
jstack Stack Trace for Java,显示虚拟机的线程快照

jps:虚拟机进程状况工具

jps命令格式
jps [options] [hostid]
option选项的合法值
选项 作用
-q 只输出LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的是Jar包,输出Jar路径
-v 输出虚拟机进程启动时JVM参数

jstat:虚拟机统计信息监视工具

jstat命令格式
jstat [option vmid[interval[s|ms][count]]]
option选项的合法值
选项 作用
-class 监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc 监视Java堆状况,包括Eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
-gccapacity 监视内容与-gc基本相同,但是输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil 监视内容与-gc基本相同,但是输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutail功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew 监视新生代GC状况
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-gcold 监视老年代GC状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用的最大、最小空间
-gcpermcapacity 输出永久代使用到的最大、最小空间
-compiler 输出JIT编译器编译过的方法、耗时等信息
-printcompilation 输出已经被JIT编译的方法
举例说明
[root@izuf6b ~]# jstat -gcutil 26344
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
 87.96   0.00  29.78   5.99  98.13  97.44     92    2.096     4    0.752    2.848
  ```

查询结果表明:
`S0`:表示Survivor0
`S1`:表示Survivor1
`E`:表示Eden区,新生代,使用了29.78%的空间
`O`:表示Old,老年代,使用了5.99%的空间
`M`:表示Metaspace,元空间,使用了98.13%的空间
`CCS`:表示Compressed class space,压缩类空间,使用了97.44%的孔径
`YGC`:表示Young GC,发生了92次
`YGCT`:表示Young GC所用的时间,耗时2.096秒
`FGC`:表示Full GC,发生了4次
`FGCT`:表示Full GC所用的时间,耗时0.752秒
`GCT`:表示所有GC所用的时间,耗时2.848秒

#### jinfo:Java配置信息工具

##### jinfo命令格式
```bash
jinfo [option] pid
option选项的合法值
选项 作用
-flag name 打印指定参数名字(name)
-flag [+ / -] name 指定参数名字(name)的启用和关闭
-flag name=value 指定参数名字(name)赋值(value)
-flags 打印VM flags参数
-sysprops 打印Java系统参数
no option 打印上面两个(flags和sysprops)的所有参数

比如查看PID为10275进程的最大堆内存大小

[root@izuf6b ~]# jinfo -flag MaxHeapSize 10275
-XX:MaxHeapSize=536870912

jmap:Java内存映像工具

jmap命令格式
jmap [option] vmid
option选项的合法值
选项 作用
no option 打印与Solaris pmap相同的信息
-heap 打印heap的概要信息
-histo[:live] 打印java对象heap信息,如果指定了“live”子选项,则只统计活动对象
-clstats 打印类加载器信息
-finalizerinfo 打印正等候回收的对象的信息
-dump:<dump-options> 以hprof二进制形式,输出java的heap信息
-F 与 -dump:<dump-options> <pid> or -histo连用,当查询进程没有响应则强制输出heap信息。在这个模式下,live参数无效.
-J<flag> <flag>直接传递到运行的系统
举例说明:

查看进程id为26628的程序heap信息

[root@izuf6b test]# jmap -heap 进程id为26628的程序heap信息
Attaching to process ID 26628, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration: //堆配置情况
   MinHeapFreeRatio         = 0  //最小堆使用比例
   MaxHeapFreeRatio         = 100 //最大堆使用比例
   MaxHeapSize              = 1073741824 (1024.0MB) //最大堆空间
   NewSize                  = 268435456 (256.0MB) //新生代分配空间
   MaxNewSize               = 268435456 (256.0MB) //最大新生代可分配空间
   OldSize                  = 805306368 (768.0MB) //老年代空间
   NewRatio                 = 2 //新生代比例
   SurvivorRatio            = 8 //幸存者比例
   MetaspaceSize            = 21807104 (20.796875MB) //元空间大小
   CompressedClassSpaceSize = 1073741824 (1024.0MB) //压缩类空间大小
   MaxMetaspaceSize         = 17592186044415 MB //最大元空间大小
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage: //堆使用情况
PS Young Generation
Eden Space: //伊甸区
   capacity = 231735296 (221.0MB)
   used     = 25747464 (24.55469512939453MB)
   free     = 205987832 (196.44530487060547MB)
   11.110721778006575% used
From Space: //survior1区
   capacity = 17825792 (17.0MB)
   used     = 0 (0.0MB)
   free     = 17825792 (17.0MB)
   0.0% used
To Space: //survior2区
   capacity = 18350080 (17.5MB)
   used     = 0 (0.0MB)
   free     = 18350080 (17.5MB)
   0.0% used
PS Old Generation //老年代使用情况
   capacity = 805306368 (768.0MB)
   used     = 64331744 (61.351531982421875MB)
   free     = 740974624 (706.6484680175781MB)
   7.988480726877849% used

36284 interned Strings occupying 5275200 bytes.

导出进程id为26628的程序heap信息到jmapDump.log文件

[root@izuf6b ~]# jmap -dump:live,format=b,file=jmapDump.log文件 26628

jstack:Java堆栈跟踪工具

jstack命令格式
jstack [option] vmid
option选项的合法值
选项 作用
-F 当正常输入的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的堆栈信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈

例如将进程ID为26344的程序堆栈信息打印到dump.log文件中

[root@izuf6b ~]# jstack -l 26344 > dump.log

发表评论

电子邮件地址不会被公开。 必填项已用*标注