目录
一、JVM故障处理工具概述
二、详细工具解析
1. jps:虚拟机进程状况工具
2. jstat:虚拟机统计信息监视工具
3. jinfo:Java配置信息工具
4. jmap:Java内存映像工具
5. jhat:堆转储快照分析工具
6. jstack:Java堆栈跟踪工具
7. jcmd:综合诊断命令工具
三、可视化工具
1. jconsole
2. VisualVM
四、工具使用场景总结
五、实战建议
六、高级技巧
一、JVM故障处理工具概述
Java虚拟机(JVM)提供了丰富的故障处理工具,可以帮助开发者快速诊断和解决运行时问题。这些工具主要分为以下几类:
-
进程状态工具:jps
-
统计监控工具:jstat
-
配置信息工具:jinfo
-
内存分析工具:jmap, jhat
-
堆栈分析工具:jstack
-
综合诊断工具:jcmd
-
可视化工具:jconsole, VisualVM等
二、详细工具解析
1. jps:虚拟机进程状况工具
功能:列出正在运行的虚拟机进程及其主类名、JVM参数等信息
常用命令:
jps -q # 只显示进程ID
jps -m # 显示传递给main方法的参数
jps -l # 显示主类的全名
jps -v # 显示JVM参数
示例输出:
1234 Jps
5678 MyApplication
2. jstat:虚拟机统计信息监视工具
功能:监控类加载、内存、GC等JVM运行数据
常用选项:
jstat -class <pid> # 类加载统计
jstat -gc <pid> # GC堆行为统计
jstat -gccapacity <pid> # 堆内存统计
jstat -gcutil <pid> # GC统计摘要
jstat -printcompilation <pid> # JIT编译统计
示例(监控GC情况,每1秒刷新一次,共10次):
jstat -gcutil 5678 1000 10
3. jinfo:Java配置信息工具
功能:查看和修改虚拟机参数
常用命令:
jinfo <pid> # 查看所有参数
jinfo -flags <pid> # 查看显式设置的参数
jinfo -sysprops <pid> # 查看系统属性
jinfo -flag <name> <pid> # 查看特定参数值
示例(查看最大堆内存设置):
jinfo -flag MaxHeapSize 5678
4. jmap:Java内存映像工具
功能:生成堆转储快照、查询堆内存信息
常用命令:
jmap -heap <pid> # 显示堆详细信息
jmap -histo <pid> # 显示堆中对象统计
jmap -dump:format=b,file=heap.hprof <pid> # 生成堆转储文件
示例(生成堆转储文件):
jmap -dump:live,format=b,file=myapp.hprof 5678
5. jhat:堆转储快照分析工具
功能:分析jmap生成的堆转储文件
使用方法:
jhat heap.hprof
启动后访问 http://localhost:7000查看分析结果
注意:jhat功能较为基础,生产环境建议使用MAT(Eclipse Memory Analyzer)等更强大的工具
6. jstack:Java堆栈跟踪工具
功能:生成虚拟机当前时刻的线程快照
常用命令:
jstack <pid> # 打印线程堆栈
jstack -l <pid> # 打印锁信息
jstack -F <pid> # 强制dump(当jvm无响应时)
示例(将堆栈信息输出到文件):
jstack 5678 > thread_dump.txt
7. jcmd:综合诊断命令工具
功能:集成了多种诊断功能的综合工具
常用命令:
jcmd <pid> help # 查看支持的命令
jcmd <pid> VM.flags # 查看JVM参数
jcmd <pid> VM.uptime # 查看JVM运行时间
jcmd <pid> GC.heap_info # 查看堆信息
jcmd <pid> Thread.print # 打印线程堆栈
jcmd <pid> GC.run # 触发Full GC
三、可视化工具
1. jconsole
Java自带的监控管理控制台,可监控内存、线程、类、MBean等
启动方式:
jconsole
2. VisualVM
功能更强大的可视化工具,支持:
-
应用程序快照
-
CPU和内存 profiling
-
线程分析
-
MBean查看等
四、工具使用场景总结
问题类型 | 推荐工具 |
---|---|
进程查看 | jps |
内存泄漏 | jmap, jhat, VisualVM |
CPU占用高 | jstack, VisualVM |
死锁 | jstack -l |
GC问题 | jstat, jcmd GC.* |
参数查看/修改 | jinfo, jcmd VM.flags |
综合诊断 | jcmd |
五、实战建议
-
定期收集基线数据:在系统正常时使用这些工具收集数据,作为问题诊断的基准
-
组合使用工具:如先用jps找到问题进程,再用jstat监控GC,最后用jmap生成堆转储
-
自动化监控:考虑将关键指标(jstat数据等)纳入监控系统
-
生产环境谨慎使用:某些命令(如jmap -dump)会导致JVM暂停,应在低峰期使用
六、高级技巧
-
远程连接:大多数工具支持连接远程JVM(需配置JMX等)
-
自动化分析:结合shell脚本实现自动化诊断
-
与日志结合:将工具输出与应用日志关联分析
-
使用替代工具:对于复杂问题,考虑使用Arthas、MAT等更专业的工具