JVM监控工具
以下是JVM监控工具的分类、优缺点及使用方法的详细总结:
一、JVM自带工具
1. 命令行工具
-
jps (Java Process Status)
-
用途:查看当前用户的Java进程ID及主类名。
-
优点:轻量级,快速定位进程。
-
缺点:功能单一。
-
命令:
jps -l # 显示进程ID和完整主类名 jps -v # 显示JVM启动参数
-
-
jstat (JVM Statistics Monitoring Tool)
-
用途:监控类加载、GC、JIT编译等状态。
-
优点:实时监控,无侵入。
-
缺点:输出为文本,需手动解析。
-
命令:
jstat -gcutil <pid> 1000 # 每1秒输出一次GC统计 jstat -class <pid> # 类加载/卸载情况
-
-
jstack (Java Stack Trace)
-
用途:生成线程快照,分析死锁或线程阻塞。
-
优点:快速获取线程信息。
-
缺点:需手动触发。
-
命令:
jstack <pid> > thread_dump.txt
-
-
jmap (Java Memory Map)
-
用途:生成堆转储(Heap Dump),或查看堆内存分布。
-
优点:直接获取内存详情。
-
缺点:生成堆转储可能导致应用暂停。
-
命令:
jmap -heap <pid> # 显示堆内存摘要 jmap -dump:format=b,file=heap.hprof <pid> # 生成堆转储
-
-
jinfo (Java Configuration Info)
-
用途:查看或动态修改JVM参数。
-
优点:支持运行时调整部分参数。
-
缺点:功能有限。
-
命令:
jinfo <pid> # 显示所有JVM参数 jinfo -flag +PrintGCDetails <pid> # 动态启用GC日志
-
-
jcmd (Java Command)
-
用途:多功能工具,支持生成堆转储、线程快照等。
-
优点:集成多个工具功能。
-
缺点:命令复杂。
-
命令:
jcmd <pid> VM.flags # 查看JVM参数 jcmd <pid> GC.heap_dump heap.hprof # 生成堆转储
-
2. 图形化工具
-
JConsole
-
用途:监控堆、线程、类、MBean等。
-
优点:界面简单,无需安装。
-
缺点:功能较基础,高负载时可能影响性能。
-
启动命令:
jconsole
-
-
VisualVM
-
用途:集成监控、线程分析、堆转储分析、Profiling。
-
优点:功能全面,支持插件扩展(如Visual GC)。
-
缺点:JDK 9+需单独下载。
-
启动命令:
jvisualvm
-
-
Java Mission Control (JMC)
-
用途:低开销的性能分析,支持飞行记录器(Flight Recorder)。
-
优点:生产环境友好,提供详细事件记录。
-
缺点:部分高级功能需商业许可。
-
启动命令:
jmc
-
二、第三方工具
1. 开源工具
-
Arthas
-
用途:在线诊断,支持动态跟踪方法调用、热修复。
-
优点:无需重启,功能强大。
-
缺点:需熟悉命令行操作。
-
使用示例:
# 启动Arthas并附加到进程 java -jar arthas-boot.jar # 监控方法执行耗时 trace com.example.MyClass myMethod
-
-
Eclipse Memory Analyzer (MAT)
-
用途:分析堆转储,定位内存泄漏。
-
优点:强大的内存分析能力。
-
缺点:需生成堆转储文件,离线分析。
-
使用流程:
-
用
jmap
生成堆转储。 -
使用MAT打开
.hprof
文件,分析内存占用。
-
-
-
Prometheus + Grafana + JMX Exporter
-
用途:构建实时监控仪表盘。
-
优点:支持长期存储和告警。
-
缺点:配置复杂。
-
部署步骤:
-
启动应用时添加JMX Exporter Agent:
java -javaagent:jmx_prometheus_javaagent.jar=8080:config.yml -jar app.jar
-
Prometheus采集数据,Grafana配置可视化面板。
-
-
2. 商业工具
-
JProfiler
-
用途:CPU、内存、线程分析。
-
优点:界面友好,深度分析能力。
-
缺点:付费,仅适合开发/测试环境。
-
使用:通过GUI连接本地或远程JVM。
-
-
YourKit
-
用途:性能分析,类似JProfiler。
-
优点:低开销,支持生产环境。
-
缺点:付费。
-
三、工具选型建议
-
快速排查线上问题:
jstack
/jmap
+ Arthas。 -
内存泄漏分析:
jmap
生成堆转储 + MAT。 -
长期监控:Prometheus + Grafana。
-
开发环境深度分析:JProfiler/YourKit。
-
低开销生产监控:JMC Flight Recorder。
通过结合自带工具和第三方工具,可以覆盖从快速诊断到深度分析的全场景需求。