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