VisualVM集成了多个JDK命令行工具,可以有效地对JAVA应用程序进行性能分析、优化以及调整等操作,包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析等功能,是一款可视化的监控分析工具!
VisualVM软件特色
1、快照分析
我们可以使用VisualVM的快照功能,生成任何性能分析快照,保存在当地,帮助我们进行性能分析。快照为抓取APP性能分析数据提供了一个非常便捷的方式,因为快照一旦生成,就可以随时离线打开查看,也可以相互传播。
VisualVM提供了两种快照
专业快照:当一个性能分析对话(内存或CPU)正在进行时,我们可以通过性能分析结果工具栏的快照按钮生成专业快照来捕捉当时的性能分析数据。
应用快照:右键点击左侧应用程序窗口的应用程序节点,选择应用程序快照生成应用程序快照。应用快照在收集某个时刻的堆积转移、线程转移和Profiler快照的同时,也捕获JVM的基本信息。
2、中央处理器分析
VisualVM可以监控应用程序在一段时间内的CPU使用情况,显示CPU的使用率、方法的执行效率和频率等相关数据,有助于发现应用程序的性能瓶颈。我们可以通过VisualVM的监控标签和Profiler标签对应用程序进行CPU性能分析。
3、内存分析
VisualVM可以通过检测JVM中加载的类别和对象信息等来分析存储器的使用情况,通过VisualVM的监视标签和Profiler标签可以对应用程序进行存储器分析。
4、转移功能
线程转移存储的生成与分析:VisualVM可以生成线程转移存储在运行中的本地应用程序,印刷活动线程的堆栈痕迹,有效理解线程的运行状况,诊断死锁、应用程序瘫痪等问题。
堆积转移存储的生成和分析:VisualVM可以生成堆积转移存储,统计某个特定时刻JVM中的对象信息,分析对象的引用关系、内存是否泄漏等。
5、线程分析
Java语言可以很好地实现多线程应用。当我们调整或开发多线程应用程序后期进行性能调整时,我们通常需要了解当前程序中所有线程的运行状态,以及是否有死锁、热锁等情况,从而分析系统可能存在的问题。
VisualVM软件功能
一、性能分析的主要方式
1、监控:监控是检查应用程序运行时行为的一般方法。多个视图分别实时显示CPU的使用状况、内存的使用状况、线程状态和其他有用的信息,以便用户能够立即发现问题的关键。
2、存储:性能分析工具从存储器中获取当前状态数据,存储到文件用于静态性能分析。Java程序通过在启动Java程序时添加适当的条件参数来触发转移操作。包括以下三种类型:
3、系统转移:JVM生成的当地系统转移,也称为核心转移。一般来说,系统的存储数据量很大,需要与平台相关的工具进行分析,如Windows上的windbg和Linux上的gdb。
4、Java转移:JVM内部生成的格式化数据包括线程信息、类别加载信息和堆积统计数据。通常也用于检测死锁。
5、堆积存储:JVM将所有对象的堆积内容存储在文件中。
二、快照
APP启动后,性能分析工具开始收集各种运行时的数据,其中有些数据直接显示在监视图中,而且大部分数据保存在内部,直到用户要求取得快照,才显示出基于这些保存的数据的统计信息。快照包含APP在一段时间内的执行信息,通常有CPU快照和内存快照两种。
CPU快照:主要包括应用程序函数的调用关系和运行时间,这些信息通常可以在CPU快照视图中查看。
内存快照:主要包括内存的分配和使用情况、装载的所有类别、存在的对象信息和对象之间的引用关系等。这些信息通常可以在内存快照视图中查看。
三、性能分析
性能分析通过收集程序运行时的执行数据,帮助开发人员优化程序所需的部分,提高程序的运行速度和存储器的使用效率,主要有以下三个方面
CPU性能分析:CPU性能分析的主要目的是统计函数的调用状况和执行时间,或者更简单的情况是统计应用程序的CPU使用状况。通常有CPU监控和CPU快照两种方式来显示CPU性能分析结果。
存储性能分析:存储性能分析的主要目的是通过统计存储使用情况来检测可能存在的存储泄漏问题,并确定优化存储使用的方向。通常有内存监控和内存快照两种方式来显示内存性能分析结果。
线程性能分析:线程性能分析主要用于在多线程应用程序中确定存储器的问题。一般包括线程状态的变化状况、死锁状况和某线程在线程生命期内状态的分布状况等。
安装教程
VisualVM 是一个性能分析工具,自从 JDK 6 Update 7 以后已经作为 Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下。VisualVM 自身要在 JDK6 以上的版本上运行,但是它能够监控 JDK1.4 以上版本的应用程序。下面主要介绍如何安装 VisualVM 以及各种 VisualVM 上的插件。
一、安装VisualVM
1、将 VisualVM 安装程序解压缩到本地系统。
2、导航至 VisualVM 安装目录的 bin 目录,然后启动 jvisualvm.exe。
二、安装 VisualVM 上的插件
VisualVM 插件中心提供很多插件以供安装向 VisualVM 添加功能。可以通过 VisualVM 应用程序安装,或者从 VisualVM 插件中心手动下载插件,然后离线安装。另外,用户还可以通过下载插件分发文件 (.nbm 文件 ) 安装第三方插件为 VisualVM 添加功能。
1、VisualVM 插件中心安装插件安装步骤 :
从主菜单中选择“工具”》“插件”。
在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。
逐步完成插件安装程序。
2、从主菜单中选择“工具”》“插件”。
在“已下载”标签中,点击“添加插件”按钮,选择已下载的插件分发文件 (.nbm) 并打开。
选中打开的插件分发文件,并单击“安装”按钮,逐步完成插件安装程序。
更新日志
变化
功能和改进。
GH-260: 完全支持在JDK 16上运行并监控/描述Java 16进程
GH-262: 增加对苹果M1的支持
GH-270: 从以前的VisualVM版本导入插件
GH-275: 增加关于启用模块的信息
GH-279: 增加保留尺寸计算的部分进度
GH-254: 更新器的品牌效应。
Python的堆栈跟踪
HeapViewer - 逻辑值增加了Instant, Attributes$Name, FDBigInteger, java.lang.module
HeapViewer - java.util类的逻辑值--集合现在显示元素的数量
Gradle的应用识别器
更新了JDK工具的应用识别器
API变更。
GH-282: 在org.graalvm.visualvm.lib.jfluid.heap包的公共API中添加泛型。
GH-283: 增加了从实例中获取Heap的方法。
修复了Bug。
GH-127: G1GC的最大堆不正确
GH-257: "打开快照失败。"由于没有完全读取压缩数据
GH-263: 保留的大小计算为负数
GH-268: 检测VisualVM是否在Eclipse OpenJ9上运行
GH-272: 计算引用时没有进度条
GH-273: NPE:无法调用 "java.lang.management.MemoryMXBean.gc()"
GH-274: 逻辑值:'...'被添加到完整的字符串中
GH-276: 缺少已知的阻塞方法
GH-277: 不正确的水平滚动
GH-278:LongBuffer.startReading()处的NPE。
GH-280: 在MacOS上选择背景颜色不正确
HeapViewer--PythonModule、SourceImpl$Key、InetSocketAddress、BigDecimal的逻辑值固定。
内存采样器--改进了重载下的刷新功能
改进了对IntelliJ应用程序的检测
上一篇:简单课堂(视频教学)
下一篇:吾爱免杀工具箱