【JVM】【三】【JVM命令行及可视化工具】
一、JVM命令行工具
1.1、jps 虚拟机进程状况工具
1.1.1、命令
jps [options] [hostid]
1.1.2、作用
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class, main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID (LVMID, Local Virtual M achine Identifier)
1.1.3、使用场景
- 需要确认进程id
1.1.4、参数
-q 只输出LVMID.省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()承数的参数
-l 输出主类的全名,如果进程执行的是JAR包,则输出JAR路径
-v 输出虚拟机进程启动时的JVM参数
1.1.5、使用
-
jps
-
jps -q
-
jps -m
-
jps -l
-
jps -v
注:对于本地虚拟机进程来说, LVMID与操作系统的进程ID (PID, Process Identifier)是一致的,使用Windows的任务管理器或者UNIX的ps命令也可以查询到虚拟机进程的LVMID。
1.2、jstack Java堆栈跟踪工具
1.2.1、命令
jps [options] vmid
1.2.2、作用
用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件) ,线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。
1.2.3、使用场景
- 线程出现长时间停顿(如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因)
注:线程出现停顿时通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源
1.2.4、参数
-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈
1.2.5、使用
-
jstack -F vmid
-
jstack -l vmid
-
jstack -m vmid
1.3、jinfo Java配置信息工具
1.3.1、命令
jinfo [options] pid
1.3.2、作用
实时查看和调整虚拟机各项参数。
1.3.3、使用场景
- 使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外,就只能使用jinfo的-flag选项进行查询了(如果只限于JDK 6或以上版本的话,使用javaXX: +PrintFlagsFinal查看参数默认值也是一个很好的选择)。
- jinfo还可以使用-sysprops选项把虚拟机进程的System.getPropertiesO的内容打印出来。这个命令在JDK 5时期已经随着Linux版的JDK发布,当时只提供了信息查询的功能, JDK 6之后,jinfo在Windows和Linux平台都有提供,并且加入了在运行期修改部分参数值的能力(可以使用-flag[+-]name或者-flag name-value在运行期修改一部分运行期可写的虚拟机参数值)。
注:在JDK 6中, jinfo对于Windows平台功能仍然有较大限制,只提供了最基本的-flag选项。
1.3.4、参数
no option 输出全部的参数和系统属性
-flag name 输出对应名称的参数
-flag [+|-]name 开启或者关闭对应名称的参数
-flag name=value 设定对应名称的参数
-flags 输出全部的参数
-sysprops 输出系统属性
1.3.5、使用
-
jinfo pid
-
jinfo -flag name pid
-
jinfo -flag [+|-]name pid
-
jinfo -flag name=value pid
-
jinfo -flags pid
-
jinfo -sysprops pid
1.4、jstat 虚拟机统计信息监视工具
1.4.1、命令
jmap [option] vmid
1.4.2、作用
1.4.3、使用场景
1.4.4、参数
1.4.5、使用
1.5、jmap Java内存映像工具
1.5.1、命令
1.5.2、作用
生成堆转储快照,与jhat配合使用
1.5.3、使用场景
1.5.4、参数
1.5.5、使用
1.6、jhat 虚拟机堆转储快照分析工具
1.6.1、命令
1.6.2、作用
分析jmap生成的堆转储快照