本文大纲
《JVM剖析及性能跟踪》
JVM剖析工具--JVisualVM
JVisualVM简介
JVisualVM 是 Java 开发工具包(JDK)中自带的一款强大的图形化性能监控和故障诊断工具。它集成了多种性能分析工具,能够帮助开发者监控 Java 应用程序的运行状态,诊断性能瓶颈,优化内存和 CPU 使用情况。无论是开发、测试还是生产环境,JVisualVM 都是一个不可或缺的工具。
主要功能包括:
- 实时监控:监控 Java 应用程序的 CPU、内存、线程、类加载等关键指标。
- 性能分析:通过 CPU 采样和内存分析,定位性能瓶颈。
- 线程分析:查看线程状态,诊断死锁和线程阻塞问题。
- 堆转储分析:生成和分析堆转储文件,排查内存泄漏问题。
- 插件扩展:支持通过插件扩展功能,如与 Eclipse Memory Analyzer(MAT)集成进行更深入的内存分析。
安装与配置
JVisualVM 是 JDK 的一部分,因此无需单独安装。只需确保你已经安装了 JDK,并在 JDK 的 bin 目录下找到 jvisualvm 可执行文件即可启动。
启动方式:
-
命令行启动:
- 如果你使用的是 Windows 系统,可以在命令行中输入
jvisualvm来启动它。 - 对于 macOS 或 Linux 用户,在终端中输入相同的命令即可。
- 如果你使用的是 Windows 系统,可以在命令行中输入
-
IDE 集成:如果你使用的是 NetBeans 等 IDE,JVisualVM 通常已经集成在 IDE 中,可以直接通过 IDE 启动。
远程监控配置:
JVisualVM 支持监控远程 Java 应用程序。要启用远程监控,需要在启动远程 JVM 时添加以下参数:
jvm启动参数加入以下内容,再使用Jvisualvm连接1099端口查看
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
然后在 JVisualVM 中添加远程主机,并指定端口即可连接。
主要面板解析
1. 概览面板(Overview)
概览面板提供了 JVM 实例的基本信息,包括 JVM 的启动时间、Java 运行时版本、加载的类数量、垃圾回收统计等。通过该面板,可以快速了解 JVM 的整体运行状态。

2. 监控器面板(Monitors)
监控器面板是 JVisualVM 的核心功能之一,用于实时监控应用程序的内存和 CPU 使用情况。它提供了以下关键信息:
- 内存使用情况:显示堆内存和非堆内存的使用情况,帮助识别内存泄漏或内存不足问题。
- CPU 使用率:显示应用程序的 CPU 占用情况,帮助定位 CPU 密集型操作。

3. CPU 采样面板(CPU Sampler)
CPU 采样面板用于分析应用程序的 CPU 使用情况。它通过采样方式,展示哪些方法和线程占用了最多的 CPU 时间。开发者可以通过该面板快速定位性能瓶颈,优化代码。

干货
为了快速的找到我们自己项目的代码中某个最耗时的业务方法,
找出自己项目的包名,加入到过滤条件中。可以通过包名过滤,只显示我们开发的类与方法的执行耗时,这个过滤功能是非常实用的。
4. 线程面板(Threads)
线程面板展示了应用程序中所有线程的状态和堆栈信息。通过该面板,可以查看线程的运行状态(如运行、阻塞、等待等),并诊断线程死锁或阻塞问题。

5. 类面板(Classes)
类面板显示了当前 JVM 中加载的类数量及其内存占用情况。通过该面板,可以监控类的加载和卸载情况,帮助识别类加载导致的内存问题。
6. 堆转储面板(Heap Dump)
堆转储面板允许开发者生成和分析堆转储文件。堆转储是 JVM 内存的快照,可以用于分析内存泄漏或内存使用情况。JVisualVM 支持将堆转储文件导出,并使用 Eclipse Memory Analyzer(MAT)进行更深入的分析。
7. Visual GC
Visual GC 是 JVisualVM 中的一个插件,它提供了直观的图形化界面来监控和分析 Java 应用程序的垃圾回收(GC)活动。通过 Visual GC,你可以实时观察堆内存、非堆内存以及不同代(如新生代、老年代)的使用情况,帮助你更好地理解和优化 JVM 的性能。
主要功能:
- 堆内存监控:显示堆内存的各个区域(Eden、Survivor、Old Gen)的使用情况,帮助识别内存分配和回收模式。
- 垃圾回收统计:实时显示垃圾回收的次数、时间、类型(如 Minor GC 和 Full GC),帮助分析 GC 对应用性能的影响。
- 内存分配速率:监控对象在堆内存中的分配速率,帮助识别内存分配过快的场景。
- GC 事件可视化:通过时间轴展示 GC 事件的发生时间,帮助开发者了解 GC 的频率和持续时间。
安装插件,工具一>插件, 安装好Visual CG插件 就会出现Visual CG 的标签。


Visual GC 是一个非常有用的插件,它可以提供丰富的图形化视图来帮助你理解和优化 Java 应用程序的内存使用和垃圾回收活动。通过实时监控堆内存、非堆内存以及详细的 GC 信息,你可以更有效地诊断和解决与内存管理相关的问题。
总结
JVisualVM 是一款功能强大且易于使用的 Java 性能分析工具,适用于开发、测试和生产环境。通过其丰富的监控和分析功能,开发者可以快速定位性能瓶颈,优化应用程序的内存和 CPU 使用情况。无论是本地还是远程监控,JVisualVM 都能为 Java 应用的性能优化提供有力支持。
如果你还没有使用过 JVisualVM,建议立即尝试,并将其纳入你的日常开发工具链中,相信它会为你的 Java 应用性能优化带来显著帮助。