一、概述
运行日志、异常堆栈、GC 日志、线程快照(threaddump/javacore文件)、堆转储快照
这些数据被用来分析数据,解决问题。
二、JDK 的命令行工具
1、jsp JVM Process Status Tool
:虚拟机进程状况工具
- 可以列出正在运行的虚拟机进程,
-
并显示执行主类所在的类名称,以及这些进程的本地虚拟机唯一 ID (Local Virtual Machine Identifier,
LVMID
) -
使用频率最高的 JDK命令行工具,因为其他工具需要用他来查询 LVMID
-
对于本地虚拟机来说,LVMID与操作系统的进程 ID(Process Identifier,PID)是一致的
命令格式
jps [options] [hostid]
2、jstat JVM Statistics Monitoring Tool
:虚拟机统计信息监视工具
- 用于监视虚拟机各种运行状态信息的命令行工具
-
可以显示本地或者远程虚拟机进程中的装载类,内存、垃圾收集、JIT编译等运行参数
-
如果是本地虚拟机,LVMID 和 VMID 是一致的
命令格式
jstat [option vmid [interval[s|ms] [count] ] ]
- 如果是远程虚拟机
命令格式
[protocol:] [//]lvmid[@hostname [:port]/servername]
3、jinfoConfiguration Info for Java
:Java 配置信息工具
- 实时查看和调整虚拟机的各项参数
-
jps 的-v 命令可以查看虚拟机启动时显式指定的参数列表,但是未被显式指定的需要 jinfo -flag
命令格式
jinfo [option] pid
4、jmap Memory Map for Java
:Java 内存映像工具
- 用于生成堆转储快照 heapdump或 dump 文件
-
还可以查询 finalize 执行队列,java 堆和永久代的详细信息
命令格式
jmap [option] vmid
5、jhat JVM Heap Analysis Tool
:虚拟机堆转储快照的分析工具
- 与 jmap 搭配使用,用来分析 jmap 生成的快照,内置了一个微型的 HTTP/HTML服务器
- 一般工作中不会使用,因为消耗硬件资源,会选择其他工具在另外的机器上进行分析
6、jstackStack Trace for Java
: Java 堆栈跟踪工具
- 用于生成虚拟机当前时刻的线程快照 threaddump/javacore文件
-
线程快照就是当前虚拟机每一条线程正在执行的方法堆栈的集合
-
生成线程快照的主要目的是定位线程出现长时间停顿的原因:如线程死锁,死循环,请求外部资源时间过长等
-
线程出现停顿的时候调用 jstack 来查看各个线程的调用堆栈,就可以知道没有响应的线程在后台做什么
命令格式
jstack [option] vmid
thread类中新增的 「getAllStackTraces( )」方法用于获取虚拟机中所有线程的StackTraceElement对象
7、HSDIS:JIT 生成代码反汇编
- HSDIS是一个Sun 官方推荐的HotSpot 虚拟机 JIT编译代码的反汇编插件,包含在 HotSpot 源码中,没有提供编译后的程序
- 作用是让 HotSpot 的
-XX:+PrintAssembly
指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量有价值的注释,这样就可以通过输出的代码来分析问题
三、JDK 的可视化工具
1、JConsole Java Monitoring and Management Console
Java 监视与管理控制台
- 是一种基于 JMX 的可视化监视器、管理工具
- 针对 JMX MBean 进行管理
2、VisualVM All-in-One Java Troubleshootign Tool
多合一故障处理工具
- 到目前为止随 jdk 发布的功能最强大的运行监视和故障处理程序
- 显示虚拟机进程以及进程的配置,环境信息 (jps、jinfo)
- 监视应用程序的 CPU、GC、堆、方法区以及线程的信息(jstat、jstack)
- dump 以及分析堆转储快照 (jmap、jhat)
- 方法级的程序运行性能分析,找出被调用最多,运行时间最长的方法
- 离线程序快照:收集程序的运行时配置、线程 dump、内存 dump 等信息建立一个快照,可以将快照发送开发者处进行 bug 反馈