Java虚拟机性能监控与故障处理工具
JDK命令行工具
jps(JVM Process Status Tool) 虚拟机进程状况工具
- 可以列出正在运行的虚拟机进程,并显示出虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)
- 对于本地虚拟机来说,LVMID与操作系统的进程ID(Process Identifier,PID)是一致的
- jps [options] [hostid]
- options为下列的选项
- hostid为主机id
选项 | 作用 |
---|---|
-q | 只输出LVMID,省略主类的名称 |
-m | 输出虚拟机进程启动时传递给主类main()函数的参数 |
-l | 输出主类的全名,如果进程执行的是jar包,输出jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
选项 | 输出 |
---|---|
默认 | 4652 Jps |
-q | 14640 |
-m | 6364 Jps -m |
-l | 2044 jdk.jcmd/sun.tools.jps.Jps |
-v | 16568 Jps -Denv.class.path=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar -Dapplication.home=C:\Program Files\Java\jdk-11.0.3 -Xms8m -Djdk.module.main=jdk.jcmd |
jstat(JVM Statistics Monitoring Tool) 虚拟机统计信息监视工具
- 用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中类加载、内存、垃圾收集、JIT编译等运行数据
- jstat [option vmid [interval [s|ms]] [count]]
- 如果是本地虚拟机进程,VMID和LVMID是一致的
- 如果是远程虚拟机进程,VMID的格式是[protocol:][//]vmid[@hostname[:port]/servername]
- 选项option代表着用户希望查询的虚拟机信息,主要分为类装载、垃圾收集、运行期编译状况
选项 | 作用 |
---|---|
-class | 监视类装载、卸载数量、总空间以及类装载所消耗的时间 |
-gc | 监视Java堆状况,包含各区的容量、已用空间、GC时间合计等信息 |
-gccapacity | 和-gc基本相同,但主要关注Java堆各个区域使用到的最大空间、最小空间 |
-gcutil | 和-gc基本相同,但主要关注已使用空间占总空间百分比 |
-gccause | 和-gcutil基本相同,但会额外输出导致上一次GC产生的原因 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已被JIT编译的方法 |
jinfo(Configuration Info for Java) Java配置信息工具
- 实时查看和调整虚拟机各项参数
- jinfo [option] [pid]
选项 | 作用 |
---|---|
-flag <name> | to print the value of the named VM flag |
-flag [+|-] <name> | to enable or disable the named VM flag |
-flag <name>=<value> | to set the named VM flag to the given value |
-flags | to print VM flags |
-sysprops | to print Java system |
<no option> | to print both VM flags and system properties |
jmap(Memory Map for Java) Java内存映像工具
- 用于生产堆存储快照,还可以查询finalize执行队列、Java堆和永久代的详情信息(如空间使用率、当前使用的是哪种收集器等)
- jmap [option] vmid
选项 | 作用 |
---|---|
-dump | 生成Java堆转储快照。格式为-dump:[live, ]format=b, file= |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象 |
-heap | 显示Java堆详情信息,如使用哪种回收器、参数配置、分代状况等 |
-histo | 显示堆中对象统计信息,包括类、实例数量、合计容量 |
-permstat | 以ClassLoader为统计口径显示永久代内存对象 |
-F | 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照 |
jhat(JVM Heap Analysis Tool) 虚拟机堆转储快照分析工具
- 和jmap搭配使用,来分析jmap生成的堆转储快照
- jhat filename
- JDK 9 已移除
jstack(Stack Trace for Java) Java堆栈跟踪工具
- 用于生成虚拟机当前时刻的线程快照
- 线程快照是当前虚拟机内每一条线程正在执行的方法堆栈的集合
- 生成快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等
- jstack [option] vmid
选项 | 作用 |
---|---|
-F | 当输出的请求不被响应时,强制输出线程的堆栈 |
-l | 除堆栈外,显示关于锁的附加信息 |
-m | 如果调用本地方法的话,可以显示C/C++的堆栈 |
可视化工具
JConsole(Java Monitoring and Management Console)
VisualVM(All-in-One Java Troubleshooting Tool)