VisualVM是一款集成了多个JDK命令行的可视化工具,可以有效地对JAVA应用程序进行性能分析、优化以及调整等操作。通常来说都用来对JAVA应用程序做性能分析和调优,内存优化、CPU分析、线程分析、快照分析、转储分析等多项非常强而有效的功能,它还支持在MBeans上进行浏览和操作,有需要用到这款VisualVM java调优工具的用户快快前来获取吧!
安装方法
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) 并打开。
选中打开的插件分发文件,并单击"安装"按钮,逐步完成插件安装程序。
VisualVM功能
一、性能分析的主要方式
1.监视:监视是一种用来查看应用程序运行时行为的一般方法。通常会有多个KKX视图(View)分别实时地显示 CPU 使用情况、内存使用情况、线程状态以及其他一些有用的信息,以便用户能很快地发现问题的关键所在。
2.转储:性能分析工具从内存中获得当前状态数据并存储到文件用于静态的性能分析。Java 程序是通过在启动 Java 程序时添加适当的条件参数来触发转储操作的。它包括以下三种:
系统转储:JVM 生成的本地系统的转储,又称作核心转储。一般的,系统转储数据量大,需要平台相关的工具去分析,如 Windows 上的 windbg 和 Linux 上的 gdb.
Java 转储:JVM 内部生成的格式化后的数据,包括线程信息,类的加载信息以及堆的统计数据。通常也用于检测死锁。
堆转储:JVM 将所有对象的堆内容存储到文件。
二、快照:
应用程序启动后,性能分析工具开始收集各种运行时数据,其中一些数据直接显示在监视视图中,而另外大部分数据被保存在内部,直到用户要求获取快照,基于这些保存的数据的统计信息才被显示出来。快照包含了应用程序在一段时间内的执行信息,通常有 CPU 快照和内存快照两种类型。
CPU 快照:主要包含了应用程序中函数的调用关系及运行时间,这些信息通常可以在 CPU 快照视图中进行查看。
内存快照:主要包含了内存的分配和使用情况、载入的所有类、存在的对象信息及对象间的引用关系等。这些信息通常可以在内存快照视图中进行查看。
三、性能分析:
性能分析是通过收集程序运行时的执行数据来帮助开发人员定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率,主要有以下三个方面:
CPU 性能分析:CPU 性能分析的主要目的是统计函数的调用情况及执行时间,或者更简单的情况就是统计应用程序的 CPU 使用情况。通常有 CPU 监视和 CPU 快照两种方式来显示 CPU 性能分析结果。
内存性能分析:内存性能分析的主要目的是通过统计内存使用情况检测可能存在的内存泄露问题及确定优化内存使用的方向。通常有内存监视和内存快照两种方式来显示内存性能分析结果。
线程性能分析:线程性能分析主要用于在多线程应用程序中确定内存的问题所在。一般包括线程的状态变化情况,死锁情况和某个线程在线程生命期内状态的分布情况等
VisualVM特色
1、运行内存分析
VisualVM根据检验JVM中载入的类和对象信息内容等协助大家分析运行内存应用状况,我们可以根据VisualVM的监控标识和Profiler标签对应用程序开展运行内存分析。
2、CPU分析
VisualVM可以监管应用程序在一段时间的CPU的运用状况,表明CPU的利用率、方式的运行高效率和頻率等有关数据信息协助大家发觉应用程序的性能短板。我们可以根据VisualVM的监控标识和Profiler标签对应用程序开展CPU性能分析。
3、进程分析
Java语言可以有效的完成线程同步应用程序。在我们对一个线程同步应用程序开展校准或是开发设计中后期做性能调优的情况下,通常必须掌握当今程序流程中全部进程的运转情况,是不是有死锁、热锁等情形的产生,进而分析系统软件很有可能存在的不足。
4、快照分析
我们可以应用VisualVM的快照作用转化成随意个性能分析快照并存放到当地来协助大家开展性能分析。快照为捕获应用程序性能分析数据信息给予了一个很快捷的方法由于快照一旦转化成可以在无论怎样无网开启和查询,还可以互相核稿。
VisualVM给予了二种类别的快照:
Profiler快照:当有一个性能分析对话(运行内存或是CPU)正在进行时,我们可以根据性能分析結果菜单栏的“快照”按键转化成Profiler快照捕获那时候的性能分析数据信息。
应用程序快照:我们可以鼠标右键点一下左边Applications对话框中应用程序连接点,挑选“应用程序快照”为转化成一个应用程序快照。应用程序快照会搜集某一时时刻刻的堆转储,进程转储和Profiler快照,与此同时也会捕获JVM的一些基本资料。
5、转储作用
进程转储的产生与分析:VisualVM可以对已经运作的当地应用程序转化成进程转储,把主题活动进程的局部变量足迹打印出出去,协助大家合理掌握进程运作的状况,确诊死锁、应用程序偏瘫等问题。
堆转储的产生与分析:VisualVM可以转化成堆转储,统计分析某一特殊时时刻刻JVM中的目标信息内容,协助大家分析目标的引入关联、是不是有内存泄漏状况的出现等。
更新日志
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应用程序的检测