【JVM 常用工具命令大全】
一、图形化工具
1. JConsole
-
启动命令:
jconsole
-
功能:
- 监控堆内存、线程、类加载情况
- 查看 MBean 信息
- 监控 CPU 使用率
- 支持远程连接 JMX
2. VisualVM
-
启动命令:
jvisualvm
-
功能:
- 更强大的性能分析功能
- 支持插件扩展(如 GC 插件)
- 线程转储分析
- 内存采样和 CPU 分析
- 支持快照对比
二、命令行工具
1. jstat —— JVM 统计监控工具
-
命令格式:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
< >
必须参数[ ]
可选参数
-
常用选项:
选项 说明 -class 类加载统计 -gc GC 堆状态 -gccapacity 各区容量 -gcutil GC 统计汇总 -gccause 最近 GC 原因 -gcnew 新生代统计 -gcold 老年代统计 -
示例:
# 每 1 秒打印一次 GC 情况,共打印 5 次 jstat -gcutil -h5 <pid> 1000 5# 带时间戳输出 jstat -gc -t <pid> 1000
2. jstack —— 线程堆栈分析
-
命令格式:
jstack [-l] [-F] <pid>
-
常用参数:
参数 说明 -l 长列表,打印锁的附加信息 -F 强制 dump(当 jstack 无响应时使用) -m 混合模式(Java 和 Native 帧) -
示例:
# 获取线程 dump 并输出到文件 jstack -l 1234 > thread_dump.txt# 查找 CPU 高的线程(配合 top 命令) top -H -p <pid> printf "%x\n" <nid> # 将线程 ID 转为 16 进制 jstack <pid> | grep -A 20 <nid_hex>
3. jmap —— 内存分析工具
-
命令格式:
jmap [option] <pid>
-
常用选项:
选项 说明 -heap 显示堆概要信息 -histo[:live] 显示堆中对象统计( live
表示只统计存活对象)-dump 生成堆转储快照 -finalizerinfo 显示等待 finalizer 的对象 -
示例:
# 生成堆 dump 文件(生产环境慎用,会 STW) jmap -dump:format=b,file=heap.hprof 1234# 显示存活对象统计 jmap -histo:live 1234 | head -20
4. jinfo —— 配置信息工具
-
命令格式:
jinfo [option] <pid>
-
常用功能:
# 查看所有系统属性 jinfo -sysprops <pid># 查看指定 JVM 参数 jinfo -flag MaxHeapSize <pid># 动态修改部分参数(仅支持可写的参数) jinfo -flag +PrintGCDetails <pid>
三、实用技巧
1. 组合使用示例
# 1. 找到目标应用的 PID
jps -mlvV | grep <app_name># 2. 观察 GC 情况
jstat -gcutil <pid> 1000 5# 3. 分析线程
jstack <pid> > thread.txt# 4. 查看对象分布
jmap -histo:live <pid> | head -20
2. 生产环境注意事项
jmap -dump
会导致 STW(Stop-The-World),谨慎使用- 优先使用
jcmd GC.heap_dump
替代jmap
- 线程 dump 建议连续做 3 次(间隔 5 秒)
- 使用
-F
参数时,可能造成 JVM 暂停更久
3. 常用分析流程
- 高 CPU:
top -H
→jstack
→ 16 进制线程 ID 匹配 - 内存泄漏:
jmap -histo
→ 分析大对象 →jmap -dump
→ MAT 分析 - GC 问题:
jstat -gcutil
→ 分析各分区变化