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 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
小马爱打代码10 小时前
面试题:内存模型与垃圾回收深度解析
jvm
cfm_291412 小时前
JVM底层源码深度解析:读写屏障(Read/Write Barrier)
jvm
wuminyu13 小时前
Java世界中StringTable源码剖析
java·linux·c语言·jvm·c++
醉颜凉15 小时前
Elasticsearch性能优化:JVM GC调优全攻略,彻底解决集群卡顿、吞吐量下降问题
jvm·elasticsearch·性能优化
顺风尿一寸16 小时前
从 Java 到内核:探秘线程改名的完整路径
jvm
lihao lihao18 小时前
linux线程
java·开发语言·jvm
南极企鹅1 天前
JVM-编译执行过程
jvm
苏克贝塔2 天前
.NET开发之.net framework对比.net core
jvm
cfm_29142 天前
JVM垃圾收集算法与收集器深度解析
jvm·测试工具·算法·性能优化