你常见的JVM工具有哪些?

1 个回答

  • 江南
    舒适是我继续一切关系的标准
    ## **常见的 JVM 监控 & 调试工具** JVM 工具主要用于 **监控、调试、分析** Java 应用的运行状态,通常分为 **JVM 自带工具** 和 **第三方工具** 两大类。 ## **1. JVM 自带工具(命令行)** 这些工具位于 **`$JAVA_HOME/bin/`** 目录下,可以用于 **监控进程、线程、GC、堆内存** 等信息。 | **工具** | **作用** | **用途** | |---------|--------|--------| | `jps` | 列出正在运行的 Java 进程 | 查看 Java 进程 ID(PID) | | `jstack` | 生成线程快照(Thread Dump) | 诊断死锁、线程阻塞、CPU 过高等问题 | | `jmap` | 生成和分析堆内存 Dump 文件 | 发现内存泄漏,分析对象分布 | | `jstat` | 监控 GC、类加载、JIT 编译等 | 排查垃圾回收(GC)性能问题 | | `jhat` | 解析 `jmap` 生成的 Heap Dump | 通过 Web 界面分析对象分布 | | `jcmd` | 统一管理 JVM 运行时命令 | 代替 `jmap、jstack、jstat` | ### **1.1 `jps`(Java 进程列表)** **作用**:列出当前所有 Java 进程及其 PID ```shell jps -l ``` ✅ **适用场景**:快速获取 Java 进程 ID,方便配合 `jstack`、`jmap` 使用。 ### **1.2 `jstack`(线程快照)** **作用**:查看 Java 进程的线程堆栈,分析死锁、线程阻塞等问题 ```shell jstack -l <PID> ``` ✅ **适用场景**: - 分析 **线程死锁** - 定位 **CPU 过高** 的线程 - 查看 **线程执行状态** ### **1.3 `jmap`(堆内存分析)** **作用**:分析 Java 进程的堆内存分布,生成 Dump 文件 ```shell jmap -heap <PID> jmap -dump:format=b,file=heap_dump.hprof <PID> ``` ✅ **适用场景**: - 发现 **内存泄漏** - 监控 **对象分布** - 配合 `MAT`、`jhat` **分析 Heap Dump** ### **1.4 `jstat`(GC 监控)** **作用**:实时监控 Java 进程的 GC 统计信息、类加载、JIT 编译等 ```shell jstat -gc <PID> 1000 ``` ✅ **适用场景**: - 分析 **GC 频率** - 监控 **对象分配 & 回收情况** - 诊断 **Full GC 过于频繁** ### **1.5 `jhat`(堆分析工具)** **作用**:解析 `jmap` 生成的堆 Dump 文件,提供 Web 界面查看对象分布 ```shell jhat heap_dump.hprof ``` ✅ **适用场景**: - 分析 **内存泄漏** - 通过 Web 界面查看 **对象引用关系** ### **1.6 `jcmd`(统一管理命令)** **作用**:提供更强大的 JVM 诊断功能,替代 `jmap`、`jstack`、`jstat` ```shell jcmd <PID> help # 显示可用命令 jcmd <PID> VM.flags # 查看 JVM 运行参数 jcmd <PID> GC.heap_dump heap_dump.hprof # 生成 Heap Dump ``` ✅ **适用场景**: - **代替 jmap、jstack、jstat** - **更全面的 JVM 监控** ## **2. 图形化 JVM 监控工具** 这些工具比命令行工具更直观,适用于 **监控应用健康状态、CPU、GC、线程、堆内存等**。 | **工具** | **作用** | **适用场景** | |---------|--------|--------| | **JConsole** | 基于 JMX,实时监控 CPU、GC、线程 | 本地 & 远程 JVM 监控 | | **VisualVM** | 监控 & 分析内存、CPU、线程、GC | 支持 Heap Dump,集成 `jstack` | | **YourKit** | 高级 Java 性能分析 | 付费工具,支持内存分析 | | **JProfiler** | 代码性能分析,找出热点 | 高级内存 & 线程分析 | | **Arthas** | 阿里开源的 Java 诊断工具 | 生产环境排查问题 | ### **2.1 JConsole(JMX 监控)** **作用**:监控 Java 进程的 **CPU、GC、线程、内存** ```shell jconsole ``` ✅ **适用场景**: - 观察 **GC 频率** - 监控 **线程 & 堆内存** - **远程 JVM 监控** ### **2.2 VisualVM(JVM 可视化分析)** **作用**:基于 NetBeans 的 Java 监控工具,可进行 CPU、线程、GC、Heap Dump 分析。 ```shell jvisualvm ``` ✅ **适用场景**: - **线程 & GC 监控** - **CPU Profiling** - **内存泄漏分析** ### **2.3 YourKit & JProfiler(商业性能分析工具)** **作用**:高级 Java 性能分析,适用于 **CPU、GC、线程、SQL、内存泄漏** ✅ **适用场景**: - **查找代码瓶颈** - **分析对象分配 & 内存泄漏** - **支持 Spring Boot、Tomcat、Dubbo 等** ### **2.4 Arthas(阿里开源 Java 诊断工具)** **作用**:适用于 **生产环境** 进行无侵入诊断,可查看线程堆栈、监控 JVM 指标、热加载代码等。 ```shell curl -L https://arthas.aliyun.com/install.sh | sh ``` ✅ **适用场景**: - **生产环境问题排查** - **无侵入调试** - **监控方法调用** ## **3. JVM 工具适用场景总结** | **工具类型** | **工具** | **主要作用** | **适用场景** | |------------|--------|------------|------------| | **进程管理** | `jps` | 列出 Java 进程 | 获取进程 ID | | **线程分析** | `jstack` | 线程堆栈快照 | 线程死锁、CPU 过高 | | **堆内存分析** | `jmap` | 生成 Heap Dump | 内存泄漏、对象分布 | | **GC 监控** | `jstat` | 监控 GC 统计 | 排查 GC 频繁问题 | | **高级管理** | `jcmd` | 统一 JVM 命令 | 代替 `jmap、jstack` | | **堆分析** | `jhat` | 分析 Heap Dump | 内存泄漏分析 | | **JMX 监控** | `JConsole` | 监控 CPU、GC、线程 | JVM 运行状态 | | **可视化分析** | `VisualVM` | 监控 & 分析 CPU、GC、Heap Dump | JVM 性能分析 | | **高级性能分析** | `YourKit` / `JProfiler` | 高级性能 & 代码分析 | 代码优化、内存分析 | | **生产环境诊断** | `Arthas` | 运行时分析、无侵入监控 | 生产环境问题排查 | ## **4. 结论** - **命令行工具(`jps, jstack, jmap, jstat, jcmd`)适合开发 & 服务器排查问题**。 - **JConsole、VisualVM 适合本地 & 远程 JVM 监控**。 - **YourKit、JProfiler 适用于代码优化、性能分析**。 - **Arthas 适合生产环境排查问题,强烈推荐!** 🚀
    发布于 2025-03-16 17:59 •IP属地 宁夏
    举报
    评论
    收藏