JVM监控工具

以下是JVM监控工具的分类、优缺点及使用方法的详细总结:


一、JVM自带工具

1. 命令行工具
  • jps (Java Process Status)

    • 用途:查看当前用户的Java进程ID及主类名。

    • 优点:轻量级,快速定位进程。

    • 缺点:功能单一。

    • 命令

      bash 复制代码
      jps -l  # 显示进程ID和完整主类名
      jps -v  # 显示JVM启动参数
  • jstat (JVM Statistics Monitoring Tool)

    • 用途:监控类加载、GC、JIT编译等状态。

    • 优点:实时监控,无侵入。

    • 缺点:输出为文本,需手动解析。

    • 命令

      bash 复制代码
      jstat -gcutil <pid> 1000  # 每1秒输出一次GC统计
      jstat -class <pid>        # 类加载/卸载情况
  • jstack (Java Stack Trace)

    • 用途:生成线程快照,分析死锁或线程阻塞。

    • 优点:快速获取线程信息。

    • 缺点:需手动触发。

    • 命令

      bash 复制代码
      jstack <pid> > thread_dump.txt
  • jmap (Java Memory Map)

    • 用途:生成堆转储(Heap Dump),或查看堆内存分布。

    • 优点:直接获取内存详情。

    • 缺点:生成堆转储可能导致应用暂停。

    • 命令

      bash 复制代码
      jmap -heap <pid>          # 显示堆内存摘要
      jmap -dump:format=b,file=heap.hprof <pid>  # 生成堆转储
  • jinfo (Java Configuration Info)

    • 用途:查看或动态修改JVM参数。

    • 优点:支持运行时调整部分参数。

    • 缺点:功能有限。

    • 命令

      bash 复制代码
      jinfo <pid>               # 显示所有JVM参数
      jinfo -flag +PrintGCDetails <pid>  # 动态启用GC日志
  • jcmd (Java Command)

    • 用途:多功能工具,支持生成堆转储、线程快照等。

    • 优点:集成多个工具功能。

    • 缺点:命令复杂。

    • 命令

      bash 复制代码
      jcmd <pid> VM.flags       # 查看JVM参数
      jcmd <pid> GC.heap_dump heap.hprof  # 生成堆转储
      复制代码

2. 图形化工具
  • JConsole

    • 用途:监控堆、线程、类、MBean等。

    • 优点:界面简单,无需安装。

    • 缺点:功能较基础,高负载时可能影响性能。

    • 启动命令

      bash 复制代码
      jconsole
  • VisualVM

    • 用途:集成监控、线程分析、堆转储分析、Profiling。

    • 优点:功能全面,支持插件扩展(如Visual GC)。

    • 缺点:JDK 9+需单独下载。

    • 启动命令

      bash 复制代码
      jvisualvm
  • Java Mission Control (JMC)

    • 用途:低开销的性能分析,支持飞行记录器(Flight Recorder)。

    • 优点:生产环境友好,提供详细事件记录。

    • 缺点:部分高级功能需商业许可。

    • 启动命令

      bash 复制代码
      jmc

二、第三方工具

1. 开源工具
  • Arthas

    • 用途:在线诊断,支持动态跟踪方法调用、热修复。

    • 优点:无需重启,功能强大。

    • 缺点:需熟悉命令行操作。

    • 使用示例

      bash 复制代码
      # 启动Arthas并附加到进程
      java -jar arthas-boot.jar
      # 监控方法执行耗时
      trace com.example.MyClass myMethod
  • Eclipse Memory Analyzer (MAT)

    • 用途:分析堆转储,定位内存泄漏。

    • 优点:强大的内存分析能力。

    • 缺点:需生成堆转储文件,离线分析。

    • 使用流程

      1. jmap生成堆转储。

      2. 使用MAT打开.hprof文件,分析内存占用。

  • Prometheus + Grafana + JMX Exporter

    • 用途:构建实时监控仪表盘。

    • 优点:支持长期存储和告警。

    • 缺点:配置复杂。

    • 部署步骤

      1. 启动应用时添加JMX Exporter Agent:

        bash 复制代码
        java -javaagent:jmx_prometheus_javaagent.jar=8080:config.yml -jar app.jar
      2. Prometheus采集数据,Grafana配置可视化面板。


2. 商业工具
  • JProfiler

    • 用途:CPU、内存、线程分析。

    • 优点:界面友好,深度分析能力。

    • 缺点:付费,仅适合开发/测试环境。

    • 使用:通过GUI连接本地或远程JVM。

  • YourKit

    • 用途:性能分析,类似JProfiler。

    • 优点:低开销,支持生产环境。

    • 缺点:付费。


三、工具选型建议

  • 快速排查线上问题jstack/jmap + Arthas。

  • 内存泄漏分析jmap生成堆转储 + MAT。

  • 长期监控:Prometheus + Grafana。

  • 开发环境深度分析:JProfiler/YourKit。

  • 低开销生产监控:JMC Flight Recorder。


通过结合自带工具和第三方工具,可以覆盖从快速诊断到深度分析的全场景需求。

相关推荐
加什么瓦5 小时前
JVM——垃圾回收
jvm
CrazyClaz15 小时前
JVM(Java虚拟机)
java·jvm
Java永无止境16 小时前
JavaSE常用API之Runtime类:掌控JVM运行时环境
java·开发语言·jvm
爱喝阔落的猫16 小时前
【JVM 02-JVM内存结构之-程序计数器】
jvm
爱喝阔落的猫21 小时前
【JVM 05-JVM内存结构之-堆】
jvm
加什么瓦1 天前
JVM——内存模型
java·开发语言·jvm
观音山保我别报错1 天前
JVM 的垃圾回收机制 GC
java·开发语言·jvm
爱喝阔落的猫2 天前
【JVM 01-引言入门篇】
jvm
观音山保我别报错2 天前
JVM 双亲委派模型
jvm