前言
JVM调优流行这么一句话“无监控不调优”,因为如果没有监控,就不知道虚拟机的运行状况。更谈不上调优了,所以,学习和了解Java 虚拟机的监控工具很有必要。
概述
在Java虚拟机中经常用到的数据包括:运行日志、异常堆栈、GC日志、线程快照(ThreadDump/Javacore文件)、堆转储快照(和安排dump/hprof文件)等,经常使用适当的虚拟机监控和分析工具可以加快我们分析数据、定位解决问题的书读。
JDK的命令行工具
我们都知道JDK的bin目录下有java.exe和javac.exe命令,但是对其他命令不甚了解。bin目录下的工具包括:
sun JDK监控和故障处理工具
名称 | 主要作用 |
---|---|
jps | JVM Process Status Tool,显示指定系统内部所有的Hotspot虚拟机进程 |
jstat | JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各方面的运行数据 |
jinfo | Configuration Info for Java,显示虚拟机配置信息 |
jmap | Memory Map for Java,用于生成虚拟机的内存转储快照(heapdump文件) |
jhat | JVM Head Dump Browser,用于分析heapdump文件,会建立一个HTTP/HTML服务器 |
jstack | Stack Trace for Java,显示虚拟机的线程快照 |
jps:虚拟机进程状况工具
功能和UNIX的ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地唯一虚拟机ID(Local Virtaul Machine Idenifier,LVMID). 命令格式: jps [options] [hostid]
主要选项:
选项 | 作用 |
---|---|
-q | 只输出LVMID,省略主类的名称 |
-m | 输出虚拟机进程启动类时传递给主类main()函数的参数 |
-l | 输出主类的全名,如果进程执行的是jar,输出Jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
jstat:虚拟机统计信息监视工具
jstat(JVM statistics Monitoring Tool)是用于见识虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程的类装载、内存、垃圾收集 JIT编译等运行数据,它将是运行期定位虚拟机性能问题的首选工具。 命令格式: jstat [option vmid [interval[ s| ms] [count] ] 参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。
对于命令格式中的VMID与LVMID需要特别说明一下:如果是本地虚拟机进程,VMID和LVMID是一致的,如果是hi远程虚拟机进程,nameVMID的格式为: [protocol:][//] lvmid[@hostname[:port]/servername]
主要选项:
选项 | 作用 |
---|---|
-class | 监视类装载、卸载数量、总空间以及类装载所消耗的时间 |
-gc | 监视Java堆状况,包括Eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与-gc基本型相同,但是输出主要关注Java堆各个区域使用的最大、最小空间 |
-gcutil | 监视内容与-gc基本相同,但是输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcold | 监视老年代GC状况 |
jinfo:Java配置信息工具
jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机各项参数。 jinfo格式: jinfo [option] pid
JDK可视化工具
jconsole和visualvm