1.命令行工具
命令汇总表
名称 | 主要作用 |
jps | JVM Process Status Tool,显示执行系统内素有的HotSpot虚拟机进程 |
jstat | JVM Staticstics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 |
jinfo | Configuration Info for java,显示虚拟机配置信息 |
jmap | Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件) |
jhat | JVM Heap Dump Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果。 |
jstack | Stack Thrace for Java,显示虚拟机的线程快照 |
1.1 jps:虚拟机进程状况工具
jps(JVM Process Status)是一个功能单一,但是十分常用的工具。他的强大在于可以列出正在运行的虚拟机进程,并显示虚拟机的主类名以及这些进程的本地虚拟机的唯一ID(Local Virtual Machine Identifier,LVMID),而LVMID与操作系统的进程是一致的。这也是这个工具也是其他许多命令的源泉,因为其他好多命令都需要java的进程ID。
使用语法:jps [options] [hostid],后面两个参数都是可选的。
选项 | 作用 |
-q | 只输出LVMID,省略主类的名称 |
-m | 输出虚拟进程启动时传递给主类main()函数的参数 |
-l | 输出主类的全名,如果进程执行的是Jar包,输出jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
1.2 jstat:虚拟机统计信息监测工具
jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令工具,他可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
命令格式:
本地:jstat [option vmid [interval[s|ms] [count] ]
远程:jstat [option [protocol:][//]lvmid[@hostname[:port]/servername]。
假设需要每隔250ms查询一次进程2762垃圾收集情况,一共查询20次,那命令应当是: jstat -gc 2762 250 20
jstat参数表
选项 | 作用 |
-class | 监视类装载、卸载数量、总空间以及类装载所消耗时间 |
-gc | 监视java堆的状况,包括Eden、两个Survior区、老年代、永久代的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容和-gc基本相同,但输出主要关注java堆各个区域使用到的最大最小空间 |
-gcutil | 监视内容和-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产品的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容和-gcnew基本相同,但输出主要关注使用到的最大最小空间 |
-gcold | 监视老年代的状况 |
-gcoldcapacity | 监视内容和-gcold基本相同,但输出主要关注使用到的最大最小空间 |
-gcpermcapacity | 输出永久代使用到的最大最小空间,JDK1.8后由-gcmetacapacity代替 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
命令输出各参数含义
类型 | 含义 | 类型 | 含义 |
S0C | Survior0容量 | MU | 元空间(方法区容量)已使用 |
S1C | Survior1容量 | CCSC | 压缩使用比例容量 |
S0U | Survior0已使用 | CCSU | 压缩使用比例使用量 |
S1U | Survior1已使用 | YGC | MinorGC |
EC | Eden容量 | YGCT | MinorGC耗时 |
EU | Eden已使用 | FGC | FullGC |
OC | 老年代容量 | FGCT | FullGC耗时 |
OU | 老年代已使用 | GCT | GC总耗时 |
MC | 元空间(方法区容量)容量 |
1.3 jinfo:Java配置信息工具
jinfo(Configuration Info for java)的作用是实施地查看和调整虚拟机各项参数。使用jps-v可以查看虚拟机启动显示指定的参数列表。如果想查看未被指定的,则需要使用jinfo -flag。另外,jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties内容答应出来。
命令格式:jinfo [option] pid
1.4 jmap:Java内存映射工具
jmap(Memory Map for java)命令用于生成堆转储快照(一般为heapdump或者dump文件),另外,它还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是那种收集器等。下面标蓝色的为windows与linux都可以。
选项 | 作用 |
-dump |
生成Java堆转储快照,格式为:-dump:[live, ]format=b,file=<filename>,其中live自参数说明是否只dump出存活的对象 |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象,只在Linux/Sloaris平台下有效 |
-heap | 显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在只在Linux/Sloaris平台下有效 |
-histo | 显示堆中对象统计信息,包括类、实例数量、合计容量 |
-permstat | 以classloader为统计口径显示永久代内存状态,只在只在Linux/Sloaris平台下有效,jdk1.8已被-clstats取代 |
-F | 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照,只在只在Linux/Sloaris平台下有效 |
jmap格式命令:jamp [option] vmid。
1.5 jhat:虚拟机堆转储快照分析工具
这个命令一般搭配jmap生成快照命令使用。使用命令:jhat XXX.bin,会生成一个web页面,端口号是7000。大家有时间可是试一下。
1.6 jstack:Java堆栈跟踪工具
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threapdump或者javacore文件)。线程快照就是当前虚拟机每一条线程正在执行的方法堆栈集合,生成线程快照的目的是定位线程出现长时间停顿的原因。
参数列表
选项 | 作用 |
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-l | 出堆栈外,显示关于锁的附加信息 |
-m | 如果调用到本地方法的话,可显示C/C++的堆栈 |
命令:jstack [option] vmid
2 可视化工具
JDK除了提供大量的命令行工具之外,还提供了2个功能强大的可视化工具:JConsole和VisualVM。其中JConsole是JDK1.5提供的监控工具,而VisualVM在JDK1.6 Update7中才首次发布。
2.1 JConsole:Java监视与管理控制台
JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化工具。它不仅可以检测本地进程,同时,还可以检测远程进程。
2.2 VisualVM:多合一故障处理工具
2.2.1作用
1)显示虚拟机的进程及进程的配置
2)监视应用程序的CPU\GC、堆、方法区(元空间)以及线程信息。
3)dump以及分析堆转储快照
4)方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法。
5)离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息简历一个快照,可以将快照发送开发者处理bug.
6)其他plugins的无限可能。
2.2.2插件
不过他的功能强大之处就是可以安装插件进行分析。
请记住BTrace Workbench是一个很有意思的插件。大家可以通过网上资料学习一下。