一、命令行工具
JDK 提供了一些用于监控和诊断 Java 进程的命令行工具:
jps
(Java Process Status)- 作用:列出当前运行的 Java 进程及其进程 ID (PID)
- 示例:
jps -l
jstat
(Java Statistics Monitoring)- 作用:监控 JVM 内存使用情况、GC(垃圾回收)情况等
- 常用命令:
jstat -gc <pid> 1000 10 # 每秒查看 GC 状态,输出 10 次
jmap
(Memory Map)- 作用:查看 Java 堆内存使用情况,导出 Heap Dump
- 示例:
jmap -heap <pid> jmap -dump:format=b,file=heap_dump.hprof <pid>
jstack
(Java Stack Trace)- 作用:查看 Java 线程堆栈信息,分析死锁
- 示例:
jstack -l <pid>
jcmd
(Java Command)- 作用:执行多种 JVM 诊断命令,综合替代
jmap
、jstack
、jstat
等 - 示例:
jcmd <pid> VM.system_properties # 查看系统属性 jcmd <pid> GC.heap_dump heap_dump.hprof # 生成 Heap Dump
- 作用:执行多种 JVM 诊断命令,综合替代
jinfo
(Java Configuration Info)- 作用:获取 JVM 运行时配置信息,如 JVM 参数、系统属性等
- 示例:
jinfo -flags <pid>
二、可视化监控工具
JDK 还提供了一些 GUI 工具来进行更直观的监控:
- JConsole(Java Monitoring & Management Console)
- 作用:监控 CPU、内存、GC、线程、MBean 等
- 启动:
jconsole
- 可直接连接本地 Java 进程或远程 JVM。
- VisualVM(All-in-One 监控工具)
- 作用:分析 Java 进程的内存、GC、线程、Heap Dump 等
- 启动:
jvisualvm
- 可安装插件扩展功能,如 BTrace 进行动态字节码分析。
三、Flight Recorder & Mission Control
- Java Flight Recorder(JFR)
- 作用:JDK 内置的性能分析工具,低开销地记录 JVM 事件数据(GC、CPU、线程等)
- 启动 JFR:
java -XX:StartFlightRecording=name=myrecording,duration=60s,filename=myrecording.jfr
- 也可以通过
jcmd
启动:jcmd <pid> JFR.start name=MyRecording duration=60s filename=myrecording.jfr
- Java Mission Control(JMC)
- 作用:可视化分析 JFR 记录的数据,深度分析 JVM 运行状态
- 启动:
jmc
总结
工具 | 作用 | 适用场景 |
---|---|---|
jps | 查看 Java 进程 | 确定 JVM 进程 PID |
jstat | 监控 GC 和内存 | 了解 JVM 内存分布和回收情况 |
jmap | 导出 Heap Dump | 分析内存泄漏 |
jstack | 查看线程堆栈 | 排查死锁、卡死 |
jcmd | 综合 JVM 诊断 | 统一管理多个 JVM 命令 |
jinfo | 查看 JVM 参数 | 运行时查看 JVM 配置 |
JConsole | GUI 监控 | 实时监控 CPU、内存、GC 等 |
VisualVM | GUI 诊断工具 | 远程监控、性能分析 |
JFR | 低开销性能分析 | 生产环境下 JVM 运行分析 |
JMC | 可视化分析 JFR 记录 | 诊断性能瓶颈 |
这些工具在 Java 开发、生产环境监控和故障排查中都非常有用,建议熟练掌握!