这一篇主包会介绍JVM性能监控的图形化界面,使用图形化界面会比使用命令行更加的直观一些,最主要的其实是不需要去记命令了,以及可以看到更加详细的信息。但是主包认为还是要以命令行为主,因为不是所有的场景都可以使用图形化界面的,所以具备JVM优化能力肯定是指在任何情况下都可以完成业务需求的水平,过度依赖其实只会让大火的技术水平止步不前。有时间主包也会出一期解析命令行源码的文章,让大家知道所谓的命令到底是怎么实现的、又是怎么做到的,这个才是一个技术应该做的事情,过度依赖中间件虽然让工作更加简单易上手,但是对自身没有任何的提升。
JDK内置工具
JConsole
JDK 自带的监控工具,支持查看堆内存、线程、类加载、MBean 等。启动命令:jconsole
(在 JDK 的 bin
目录下)。适合基础监控,但功能较简单。这个其实可以作为一个常规的性能监控工具,因为UI设计简单清晰,看起来所有数据都是一目了然的,并不复杂。确定就是功能单一了只能进行简单的监控,有兴趣的小伙伴快去试一试,JConsole:Java性能监控与管理工具详解-CSDN博客

VisualVM
JDK 官方提供的增强版工具(需单独下载,JDK 9+ 后独立分发)。支持内存/CPU 分析、线程快照、堆转储分析、JMX 监控等。插件扩展:可安装 Visual GC 插件实时观察 GC 分代情况。
Java Mission Control (JMC)
Oracle 官方工具(需商业授权用于生产环境,但开发/测试环境免费)。功能有
JMX 控制台 :实时监控 JVM 指标。飞行记录器 (JFR) :低开销采集性能事件(GC、锁竞争等)。启动命令:jmc
(需安装 JDK 的 jdk.jmc
模块)。
2. 第三方工具
Eclipse Memory Analyzer (MAT)
-
专用于分析堆转储文件(
.hprof
),定位内存泄漏。功能:对象支配树、泄漏报告、OQL 查询等。
JProfiler(推荐)
商业工具,提供全面的 CPU、内存、线程分析。特点就是支持远程连接和快照对比。实时调用树、内存分配追踪、数据库 SQL 分析。
*
YourKit
另一款商业工具,性能分析精准,支持多种 JVM 语言(Java/Kotlin/Scala)。
-
GCViewer
- 可视化分析 GC 日志工具,支持
-Xloggc
或-Xlog:gc*
生成的日志。 - 官网:GCViewer GitHub。
- 可视化分析 GC 日志工具,支持
JProfiler
本篇主要介绍JProfiler,主要是功能太强大了,比前面说到的都要强大,毕竟人家是收费的。
链接:https://pan.quark.cn/s/89b22a482b90
提取码:gHDz
主包这边只有mac版本的,所以window的小伙伴还是去其他地方找找资源吧。这个是整合的教程,主包就不给大家出安装教程了,大火自己看看吧。Java JVM分析利器JProfiler 结合IDEA使用详细教程_jprofiler使用教程-CSDN博客
JProfiler 的数据采集方式概览
Instrumentation(插桩)
JProfiler 在 JVM 加载类时,动态修改字节码,在方法的入口和出口插入监控代码(类似 AOP),记录每次方法调用的耗时、参数、返回值等。特点 就是记录所有方法调用 ,无遗漏。能获取 方法参数、返回值 (适合调试复杂逻辑)。支持 行级分析 (Line-level Profiling),精确到代码行。缺点就是:性能开销大(可能使应用变慢 10%-20%)。不适合高并发或生产环境。
配置方式 :在 JProfiler 中选择 Instrumentation 模式,并过滤需要插桩的包(减少开销)。

全采样(Sampling)
JVM 每隔固定时间(如 10ms)中断所有线程,记录当前线程的堆栈信息,通过统计方法在采样中出现的频率推断其耗时。特点 是低开销 (通常 <1% CPU 占用)。适合长期监控生产环境。缺点 是可能遗漏短暂方法 (如执行时间 < 采样间隔的方法)。无法获取方法参数、返回值。配置方式 就是选择 Sampling 模式,调整采样间隔(默认 10ms)就是上面的图点编辑进去有个采样。
异步采样(Async Sampling)
就是 混合模式,对关键方法(如自定义业务方法)使用插桩,对 JVM/第三方库方法使用采样。平衡精度和性能,比纯采样更精准,比纯插桩开销更低 。缺点 就是配置复杂,需明确哪些方法需要插桩。
这个就是正在监测的页面,可以看到数据是动态的,这个可以根据不同的二级目录查看需要的视图,类似于数据大屏的效果,想看详细的信息就要看其他的一级菜单了。

这个是内存的信息,自动更新的时间是两秒,点击也可以马上更新,然后点击标记当前可以看到各个类的增加和减少的信息,这个用处就是蛮大了,比如可以根据类的增加来判断是否内存泄漏了。然后再结合二级菜单中的记录的对象可以更加直观的看到内存泄漏。

还是一样我们点击标记当前,然后选择活动对象或者垃圾回收对象,这个1/10分配的意思就是创建或者回收10个类才会被记录一次,也可以选择全记录但是性能开销就太大了,然后我们可以先观察活动对象的情况,一段时间后点击运行GC或者直接选择垃圾回收对象,查看哪些对象被回收了,再对比活动对象,如果一个类创建率高但是回收率低那么可能就是内存泄漏了。
然后剩下的三个分别是分配调用树、分配热点、类追踪器,分配调用树 :是 JProfiler 中用于分析 对象分配路径 的核心功能,它通过追踪对象的创建位置(即哪些方法调用了 new
关键字或工厂方法创建了对象),帮助开发者定位内存分配热点 和潜在的内存问题(如内存泄漏、过度分配等)。分配热点: 核心功能就是直接列出最耗内存的分配点:平铺展示分配次数最多或内存占用最高的方法(无需查看完整调用链)。快速定位到具体的方法或类。解决的问题是高频小对象分配:如循环内重复创建 String
、Integer
等。大对象集中分配:如批量加载数据时一次性分配大数组。类追踪器:这个就不要多说了吧,就是追踪我们指定的类或者包的对象创建数量。
好了这三个小功能放在下篇详细说明,今天主包有点忙来不及了。
总结
本篇介绍了市面上常见的GUI图形化JVM监控工具,推荐的是JProfiler,简单的说明了一下JProfiler的几个常用功能,附上mac的JProfiler14安装包和破解码。