来源:《深入理解Java虚拟机》 周志明著
表1
名称 | 主要作用 |
---|---|
jps | JVM Process Status Tool 显示指定系统内所有的Hotspot虚拟机进程 |
jstat | JVM Statistics Monitoring Tool 用于收集HotSpot虚拟机各方面的运行数据 |
jinfo | Configuration Info for java 显示虚拟机配置信息 |
jmap | Memory Map for Java 生成虚拟机 |
Jhat | Jvm Heap Dump Browser 用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器查看分析结果 |
jstack | Stack Trace for java 显示虚拟机的线程快照 |
表1介绍了一下主要的命令行监控工具。
下面开始一一详细介绍:
jps:虚拟机进程状况工具
功能作用:
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class
,main
函数所在的类)名称以及这些进程在本地虚拟机唯一ID。且对于本地虚拟机来说,LVMID
与操作系统的进程ID是一致的。
jps
命令格式:
jps [options] [hostid]
执行样例:
jps
可以通过RMI协议查询开启RMI服务的远程虚拟机进程状态,hostid
为RMI注册表中的注册的主机名
jps
工具的主要选项
表2
选项(option) | 作用 |
---|---|
-q | 只输出LVMID,省略朱磊的名称 |
-m | 输出虚拟机进程启动时传递给主类main()函数的参数 |
-l | 输出主类的全名,如果进程执行的是jar包,输出jar包路径 |
-v | 输出虚拟机进程启动时的JVM参数 |
jstat
:虚拟机统计信息监控工具
功能作用:
用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jstat
命令格式:
jstat [option vmid [interval[slms][count]]
if本地虚拟机->VMID
与LVMID
相同
elseVMID
的格式:[protocol:][//]lvmid[@hostname[:port]/servername]
参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次
假设每250毫秒查询一次进程2764垃圾收集情况,一个查询20次:
jstat -gc 2764 250 20
jstat
工具的主要选项:
选项 | 作用 |
---|---|
-class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监视java堆状况、包括Eden区、两个suvivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大、最小空间 |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间 |
-gccause | 与-gcutil功能一致,但是会额外输出导致上一次GC产生的原因 |
-gcold | 监视老年代GC状况 |
-gcoldcapacity | 监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间 |
-gcpermcapacity | 输出永久代使用的最大最小空间 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
jinfo
:Java配置信息工具
功能作用:
实时查看和调整虚拟机各项参数
jinfo
命令格式:
jinfo [option] pid
jmap
:java内存映像工具
功能作用:
用于生成堆转储快照(一般称为heapdump或dump文件),查询finalize执行队列、java堆和永久代的详细信息,如空间使用率、当前使用的是哪种收集器。
(暴力获取:-XX:HeapDumpOnOutOfMemoryError
可以让虚拟机OOM异常出现之后自动生成dump文件,-XX:+HeapDumpOnCtrlBreak
可以通过使用[ctrl]+[break]
键生成dump文件)
jmap命令格式:
jmap [option] vmid
jmap
工具主要选项
选项 | 作用 |
---|---|
-dump | 生成Java堆转储快照。格式为:-dump:[live,]fomat=b,file=<filename> 其中live子参数说明是否只dump出存活对象 |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象.只在Linux、Solaris平台下下载有效 |
-heap | 显示在java堆详细信息,如使用哪种回收器,参数配置、分代状况、等,只在linux/Solaris下有效 |
-histo | 显示堆中统计信息,包括类、实例数量、合计容量 |
-permstat | 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效 |
-F | 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照.只在Linux/Solaris |
jhat
:虚拟机堆转储快照分析工具
功能作用:
与jmap
结合使用,来分析jmap
生成的堆转储快照,可以在浏览器查看分析结果。
但是一般不会使用其来分析:
- 不会部署应用程序的服务器上直接分析dump文件,其分析工作比较耗时且消耗硬件资源
jhat
的分析功能相对简陋
所以不着重解释了。
jhat
:虚拟机堆转储快照分析工具
功能作用:
与jmap
结合使用,来分析jmap
生成的堆转储快照
jstack
:Java堆栈跟踪工具
功能作用:
用于生成虚拟机当前时刻的线程快照(一般称为threaddump
或者javacore
),线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的原因是定位线程出现长时间停顿的原因。
jstack
命令格式:
jstack [option] vmid
jstack
工具主要选项
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应的时候,强制输出线程堆栈 |
-l | 除堆栈之外,显示关于锁的附加信息 |
-m | 如果调用到本地方法话,可以显示C/C++的堆栈 |