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。


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

相关推荐
明天也要努力学习2 小时前
深入理解 JVM 垃圾回收(GC)
java·jvm
铁链鞭策大师2 小时前
jvm基础
jvm
香蕉大香蕉(06敬畏市场)1 天前
高频八股 · JVM(8)
java·jvm·面试·八股·大厂实习
北冥you鱼1 天前
Go 语言 GORM 使用 Preload:从关联查询到嵌套预加载的完整实践
开发语言·jvm·golang
兔头?1 天前
JVM学习文档
jvm·学习
wuminyu1 天前
JVM规范学习总结:class执行性能差异
java·linux·c语言·jvm·c++
EVEN-09131 天前
Linux-线程控制
linux·jvm
刚入门的大一新生2 天前
Linux-线程概念
linux·jvm
eleven_4u2 天前
QPS如何计算,如何部署架构
java·linux·运维·jvm·中间件
qq_452396232 天前
第八篇:《VACUUM、自动清理与膨胀治理》
jvm·数据库·oracle