文章目录
- 第4章:虚拟机性能监控、故障处理工具
-
- [4.0 个人感悟](#4.0 个人感悟)
- [4.1 概述](#4.1 概述)
- [4.2 JDK命令行工具(基础但强大)](#4.2 JDK命令行工具(基础但强大))
-
- [4.2.1 jps:虚拟机进程状况工具](#4.2.1 jps:虚拟机进程状况工具)
- [4.2.2 jstat:虚拟机统计信息监视工具](#4.2.2 jstat:虚拟机统计信息监视工具)
- [4.2.3 jinfo:配置信息工具](#4.2.3 jinfo:配置信息工具)
- [4.2.4 jmap:内存映像工具(dump快照 堆信息)](#4.2.4 jmap:内存映像工具(dump快照 堆信息))
- [4.2.5 jhat:堆转储快照分析工具(已过时)](#4.2.5 jhat:堆转储快照分析工具(已过时))
- [4.2.6 jstack:堆栈跟踪工具](#4.2.6 jstack:堆栈跟踪工具)
- [4.3 JDK可视化工具](#4.3 JDK可视化工具)
-
- [4.3.1 JConsole(JDK自带)](#4.3.1 JConsole(JDK自带))
- [4.3.2 VisualVM(多合一工具)](#4.3.2 VisualVM(多合一工具))
- [4.3.3 其他工具(建议学会)](#4.3.3 其他工具(建议学会))
第4章:虚拟机性能监控、故障处理工具
4.0 个人感悟
- 工具是知识的包装。不要本末倒置沉迷于工具使用,弄清原理会让思路更清晰
- 与时俱进。一顿研究JHSDB,结果发现已经有更先进的上位替代工具了。得从书本中走出来,结合当前环境来学习
- 工具的发展确实大大提升了生产小心,感谢为工具做出贡献的组织和个人
4.1 概述
工具的目的 :
解决定位问题时的困境(如内存泄漏、线程死锁、GC频繁等)
分类:
- 命令行工具
- 可视化工具
- JDK自带
- 三方提供
4.2 JDK命令行工具(基础但强大)
总述:
| 工具名称 | 作用简述 |
|---|---|
jps |
列出正在运行的JVM进程(类似Linux的ps) |
jstat |
监视JVM统计信息,如GC、类加载、JIT编译 |
jinfo |
查看或修改JVM配置参数 |
jmap |
生成堆转储快照(heap dump),查询堆信息 |
jhat |
分析heap dump(已被VisualVM等取代) |
jstack |
查看线程栈,检测死锁 |
4.2.1 jps:虚拟机进程状况工具
功能 :
查看虚拟机进程状况
语法 :
jps [option] [hostid]
常用选项:
-l输出完整主类名或jar路径-v输出JVM启动参数-m输出main方法的参数
示例:
shell
PS D:\code\com.dawn> jps -l
21332 jdk.jcmd/sun.tools.jps.Jps
12460 com.intellij.idea.Main
4.2.2 jstat:虚拟机统计信息监视工具
语法 :
jstat [option] vmid [interval] [count]
常用选项 :
-gc 查看GC情况(Eden、S0/S1、Old、Metaspace等容量与使用)
-gcutil 查看GC摘要(已使用占比)
-class 类加载信息
-compiler JIT编译信息
示例 :
每250ms输出一次,共10次
shell
D:\code\com.dawn> jstat -gc 12460 250 10
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT
0.0 10240.0 0.0 9561.3 159744.0 4096.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 5120.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 8192.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 12288.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 15360.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 23552.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 25600.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 30720.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 30720.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
0.0 10240.0 0.0 9561.3 159744.0 34816.0 310272.0 279352.0 361856.0 355646.0 49024.0 46439.7 36 0.163 1 0.079 24 0.097 0.339
4.2.3 jinfo:配置信息工具
功能 :
查看或动态修改JVM参数(某些参数可动态修改)
语法 :
jinfo [option] pid
常用命令 :
jinfo -flags <pid> 查看所有参数
jinfo -flag <name> <pid> 查看某个具体参数值
jinfo -flag [+|-]<name> <pid> 修改boolean参数
示例 :
查询PrintGCDetails是否开启 结果中 +表示true -表示false
shell
PS D:\code\com.dawn> jinfo -flag PrintGCDetails 3244
-XX:-PrintGCDetail
4.2.4 jmap:内存映像工具(dump快照 堆信息)
功能 :
dump快照,堆信息跟踪
语法 :
jmap [option] vmid
常用命令:
jmap -dump:live,format=b,file=heap.bin <pid>生成dump(live表示只转存活对象)jmap -histo <pid>查看对象数量与大小统计jmap -heap <pid>查看堆内存配置与使用(某些JDK版本已废弃
示例 :
可以指定存储路径
shell
PS D:\code\com.dawn> jmap -dump:live,format=b,file=D:\temp\heap_12460_live.hprof 12460
Dumping heap to D:\temp\heap_12460_live.hprof ...
Heap dump file created [396580350 bytes in 0.322 secs]
注意:执行jmap时可能暂停进程(尤其是full gc前)
4.2.5 jhat:堆转储快照分析工具(已过时)
功能 :
堆转储快照分析工具
语法 :
jhat heap.bin,启动一个HTTP服务器供浏览器查看。
说明:JDK9后移除,可用VisualVM或MAT代替。
4.2.6 jstack:堆栈跟踪工具
功能 :
生成线程快照(thread dump),定位死锁、长时间停顿
常用命令:
jstack <pid>基本用法jstack -l <pid>显示锁信息(用于死锁分析)jstack -F强制输出(进程无响应时)
死锁检测 :
输出中会直接提示"Found one Java-level deadlock"。
4.3 JDK可视化工具
4.3.1 JConsole(JDK自带)
启动 :
windows下双击 jconsole.exe,启动图形界面
功能:
- 内存监控(Heap / Non-Heap / Metaspace)
- 线程监控(线程数、线程状态、死锁检测)
- 类加载监控
- MBean管理(可调用方法,修改属性)
示例 :
连接到本地或远程JVM,实时观察内存曲线、GC活动
以64kb/50ms向堆填充数据
java
/**
* @Description JConsoleTest
* @Author bigHao
* @Date 2026/4/4
*/public class JConsoleTestCase {
static class OOMObject {
public byte[] array = new byte[64 * 1024];
}
public static void fillHeap(int num) throws InterruptedException {
List<OOMObject> list = new ArrayList<OOMObject>();
for (int i = 0; i < num; i++) {
Thread.sleep(50);
list.add(new OOMObject());
}
System.gc();
}
public static void main(String[] args) throws InterruptedException {
fillHeap(1000);
System.out.println("done");
}
}
JVM参数:
-Xms100m -Xmx100m -XX:+UseSerialGC
概览:曲线统计概览

内存:可以看到堆内各个分区的使用情况

线程:可以看到线程情况,还有检查死锁功能

4.3.2 VisualVM(多合一工具)
启动 :
windows下双击 visualvm.exe,启动图形界面(JDK6~8自带,JDK9后需单独下载)
下载地址:https://visualvm.github.io/
核心功能:
- 监控CPU、内存、类、线程
- 生成heap dump / thread dump
- 插件扩展(如Visual GC查看GC详细过程)
- 离线分析dump文件
插件推荐:
- Visual GC:图形化展示分代GC情况
- Tracer:跟踪方法调用耗时
- BTrace(需单独安装):动态跟踪应用
示例 :
因为v22没有中文版本,这里找个个汉化工具,有部分汉化,日常使用足够,有兴趣可以了解
https://github.com/zedoCN/VVM-Translator
安装完成后会自动获取本机java进程,这里查看IDEA进程:基本功能菜单类似jconsle

dump快照:

快照分析:

分析器功能:

BTrace插件:动态跟踪应用,类似JVM的AOP,不用修改部署的代码进行调试

4.3.3 其他工具(建议学会)
- JMC(Java Mission Control):商业特性,低开销生产环境监控,配合Flight Recorder使用。
- MAT(Memory Analyzer Tool):Eclipse出品,分析heap dump神器,可找出内存泄漏可疑对象。
- Arthas:阿里开源Java诊断工具,在线分析线程、方法调用、堆内存等,无需重启应用。