当前位置: 首页 > ai >正文

JVM监控工具

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


一、JVM自带工具

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

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

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

    • 缺点:功能单一。

    • 命令

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

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

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

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

    • 命令

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

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

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

    • 缺点:需手动触发。

    • 命令

      jstack <pid> > thread_dump.txt
  • jmap (Java Memory Map)

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

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

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

    • 命令

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

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

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

    • 缺点:功能有限。

    • 命令

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

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

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

    • 缺点:命令复杂。

    • 命令

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

2. 图形化工具
  • JConsole

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

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

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

    • 启动命令

      jconsole
  • VisualVM

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

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

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

    • 启动命令

      jvisualvm
  • Java Mission Control (JMC)

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

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

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

    • 启动命令

      jmc


二、第三方工具

1. 开源工具
  • Arthas

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

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

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

    • 使用示例

      # 启动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:

        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。


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

http://www.xdnf.cn/news/8418.html

相关文章:

  • Vue-js
  • python3.7版本,如何安装pyppeteer
  • 对比Java、Python和C++的数据库操作生态
  • 数学建模MathAI智能体-2025电工杯A题实战
  • NV066NV074美光固态颗粒NV084NV085
  • PyQt学习系列09-应用程序打包与部署
  • 关系数据库基础入门
  • 1538. 【中山市第十一届信息学邀请赛决赛】互质(different)
  • MDK的编译过程及文件类型全解
  • 集群、容器云与裸金属服务器的全面对比分析
  • SpringBoot项目中Redis的使用
  • 【Python打卡Day30】模块与包的导入@浙大疏锦行
  • Java 处理地理信息数据[DEM TIF文件数据获取高程]
  • 探索C++对象模型:This指针与(构造、析构)成员函数的深度解析(中篇)
  • HTTP和HTTPS详解
  • Spring Boot是什么?MybatisPlus常用注解,LambdaQueryWrapper常用方法
  • Python图形化秒表:使用Turtle打造精确计时工具
  • 劳特巴赫trace32异常问题汇总
  • 17、Python对象操作全解析:同一运算符、成员运算符与整数缓存机制实战
  • 【C++】笔试强训 第二天
  • Github 2025-05-23 Java开源项目日报 Top10
  • mysql语句执行流程
  • LeetCode Hot100(字串)
  • 电子电路:深入理解电磁耦合的定义与应用
  • 5.2.2 使用注解方式整合MyBatis
  • 树莓派内核源码的下载,配置,编译和替换
  • 【mysql】mysql的高级函数、高级用法
  • AI编辑器规则
  • LeRobot 框架的开发指南 (上)
  • 【【嵌入式开发 Linux 常用命令系列 19 -- linux top 命令的交互使用介绍】