graph LR
root["性能监控与故障处理工具"]
st["命令行工具"]
vt["可视化工具"]
jps["jps: 虚拟机进程状况工具"]
jstat["jstat: 虚拟机统计信息监视工具"]
jinfo["jinfo: Java配置信息工具"]
jmap["jmap: Java内存映像工具"]
jhat["jhat: 虚拟机堆转储快照分析工具"]
jstack["jstack: Java堆栈跟踪工具"]
root --> st
root --> vt
st --> jps
st --> jstat
st --> jinfo
st --> jmap
st --> jhat
st --> jstack
st --> HSDIS
vt --> JConsole
vt --> VisualVM
命令行工具
jps(JVM Process Status Tool)
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称(Main Class)以及这些进程的本地虚拟机唯一ID(LVMID)。
jstat(JVM Statistics Monitoring Tool)
用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在无 GUI 的服务器上更好定位运行期虚拟机性能问题。
jinfo(Configuration Info for Java)
实时地查看和调整虚拟机各项参数。使用 jps 命令的 -v 参数可以查看虚拟机启动时显示指定的参数列表,但如果想知道未被显示指定的参数的系统的默认值,只能使用 jinfo 的 -flag 选项进行查询。
jmap(Memory Map for Java)
用于生成虚拟机的内存转储快照(heapdump 文件)。除此之外,它还可以查询 finalize 执行队列、Java 堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
jhat(JVM Heap Dump Browser)
用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果。但一般不会在服务器上直接分析 dump 文件。
jstack(Stack Trace for Java)
用于生成虚拟机当前时刻的线程快照(一般为 threaddump 或 javacore 文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
HSDIS (HotSpot Disassembler)
一个专门针对HotSpot Java虚拟机(JVM)设计的插件,它的主要作用是将由HotSpot JVM的即时编译器(Just-In-Time,JIT)生成的本机机器代码进行反汇编,转换回可读的汇编语言格式。通过这种方式,开发者和性能工程师可以获得更底层的代码执行视图,以便进行详细的性能分析和优化工作。
可视化工具
JConsole(Java Monitoring and Management Console)
一种基于 JMX 的可视化监视、管理工具。它管理部分的功能是针对 JMX MBean 进行管理。
在 /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin 下启动。
Visual VM(All-in-One Java Troubleshooting Tool)
随 JDK 发布的监视和故障处理程序。包括运行监视、故障处理、性能分析等能力。
可以从 VisualVM: Home 上安装。