1 jps
主要作用:列出Java进程
1.1 -v:可以显示传递给Java虚拟机的参数
20152 JpsDemo -XX:+PrintFlagsFinal -XX:SurvivorRatio=2 -javaagent:D:\IDEA\IDEA2017\installpath\IntelliJ IDEA 2017.3.7\lib\idea_rt.jar=56858:D:\IDEA\IDEA2017\installpath\IntelliJ IDEA 2017.3.7\bin -Dfile.encoding=UTF-8
1.2 -m:用于输出参数传递给Java进程(主函数)的参数
3108 Jps -m
20152 JpsDemo 1111
6380 RemoteMavenServer
1.3 -l:可以用于输出主函数的完整路径
11296 sun.tools.jps.Jps
13840
18260 org.jetbrains.jps.cmdline.Launcher
6380 org.jetbrains.idea.maven.server.RemoteMavenServer
2 jstat
jstat是一个可用于观察java应用程序运行时相关信息的工具
2.1参数格式
#格式
jstat -<option> [-t] [-h<lines>] <vmid> [interval] [<count>]]
-
- 常用参数如下
-class:显示ClassLoader的相关信息 -complier:显示JIT编译的相关信息 -gc:显示与GC相关的堆信息 -gcocpacity:显示各个代容量及使用情况 -gccause:显示垃圾收集信息(同-gcutil),同时显示最后一个垃圾收集和当前正在垃圾收集诱发的原因 -gcnew:显示新生代信息 -gcnewcapacity:显示新生代大小与使用情况 -gcold:显示老年代和永久代的信息 -gcoldcapacity:显示老年代的大小 -gcoldcapacity:显示老年代的大小 -gcmetacapacity:显示元空间的大小 -gcutil:显示垃圾收集器信息 -printcompilation:输出JIT编译的方法信息 -
-t参数可以在输出信息上加上一个timestamp列,显示程序运行时间(从程序运行开始计算)
- -h参数是指程序在周期打印数据的时候(配合interval和count进行,inteval是指每隔多久统计一次数据,count是指统计次数),会显示表头信息。就好比一个统计班级成绩Excel表格,表格第一行会列出科目名称,这就相当于表头,接下来每行会显示每个同学各科目的成绩,这相当于数据。当设置inteval为10的时候,每隔10条统计数据,又会重新输出表头信息。
- inteval 指定统计时间间隔,单位毫秒
- count 指定统计数据次数
2.2 常用参数
-
-class
Loaded:表示载入类的数量 Bytes:载入类的合计大小 UnLoaded:卸载类的数量 Bytes:卸载类的大小 Time:加载类和卸载类的总耗时 -
-compiler
Compiled:表示编译任务执行的次数 Failed:表示编译失败的次数 Invalid表示编译不可用的次数 Time:表示编译的总耗时 FileType:表示最后一次编译失败的类型 FailedMethod:表示最后一次编译失败的类名和方法名 -
-gc
S0C:s0(from)的大小(单位KB) S1C:s1(from)的大小(单位KB) S0U:s0(from)已经使用过的空间(单位KB) S1U:s1(from)已经使用过的空间(单位KB) EC:eden区的大小(单位KB) EU:eden去使用的空间(单位KB) OC:老年代大小(KB) OU:老年代已经使用的空间(KB) MC:元空间大小(KB) MU:元空间使用的空间(KB) CCSC:当前压缩类空间的容量 (KB) CCSU:当前压缩类空间目前已使用空间 (KB) YGC:从应用程序启动到采样时年轻代中gc次数 YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) FGC:从应用程序启动到采样时old代gc次数 FGCT:从应用程序启动到采样时old代gc所用时间(s) GCT:从应用程序启动到采样时gc用的总时间(s) -
-gccapacity
NGCMN:年轻代中初始化的大小(KB) NGCMX:年轻代(young)的最大容量 (KB) NGC:年轻代中当前的容量 (字节) S0C:s0(from)的大小(单位KB) S1C:s1(from)的大小(单位KB) EC:eden区的大小(单位KB) OGCMN:old代中初始化的大小 (KB) OGCMX:old代的最大容量(KB) OGC:old代当前的容量 (KB) OC:老年代大小(KB) MCMN:metaspace(元空间)中初始化的大小 (KB) MCMX:metaspace(元空间)的最大容量 (KB) MC:metaspace(元空间)当前的容量 (KB) CCSMN:最小压缩类空间大小 CCSMX:最大压缩类空间大小 CCSC:当前压缩类空间大小 YGC:从应用程序启动到采样时old代gc所用时间(s) FGC:从应用程序启动到采样时gc用的总时间(s) -
-gccause
LGCC:上次GC的原因 GCC:当前GC的原因 -
-gcnew
TT:新生代对象晋升到老年代对象的年龄 MTT:新生代对象晋升到老年代对象的年龄最大值 DSS:所需的survivor区的大小 -
-gcnewcapacity
S0CMX:s0区的最大值(KB) S1CMX:s1区的最大值(KB) ECMX:eden区的最大值(KB) -
-gcold
-
-gcoldcapacity
-
-gcmetacapacity

- -gcutil

3 jinfo
jinfo可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数
#格式
jinfo <option> <pid>
option可以为:
- -flag :打印指定Java虚拟机参数
- -flag [+|-] :设置Java虚拟机参数的布尔值
- -flag=:设置指定Java虚拟机参数的值
4 jmap
可以生成Java程序的堆Dump文件和查看堆内对象实例的统计数据,ClassLoader的信息和finalizer队列
4.1 统计Java对象信息
#统计进程id为17340的Java进程对象信息,并输出到 D:\tmp\jmap.txt
jmap -histo 17340 > D:\tmp\jmap.txt
4.2 观finalizer队列的对象
#查看进程id为16596的finalizer队列的对象jmap -finalizerinfo 16596
4.3 获取Java程序当前堆快照
#获取Java进程id为16596的堆快照文件,并输出到D:\tmp\heap.hprof jmap -dump:format=b,file=D:\tmp\heap.hprof 16596
5 jhat
该命令可以对堆快照文件进行分析,他启动一个HTTP服务器,通过浏览器,浏览快照文件
#heap.hprof是利用jmap导出的
jhat .\heap.hprof
打开浏览器,访问下面这条url
http://localhost:7000/
6 jstack
可用于导出Java应用程序的线程堆栈
#命令格式:-l 选项用于打印锁的附加信息
jstack [-l]
#先通过jps获取Java进程的pid,然后利用jstack将线程堆栈文件导出到 D:\tmp\deadlock.txt
jstack -l 10616 > D:\tmp\deadlock.txt
检测到的死锁也会显示在文件最下方