VisualVM集成了多個JDK命令行工具,可以有效地對JAVA應(yīng)用程序進行性能分析、優(yōu)化以及調(diào)整等操作,包括生成和分析海量數(shù)據(jù)、跟蹤內(nèi)存泄漏、監(jiān)控垃圾回收器、執(zhí)行內(nèi)存和 CPU 分析等功能,是一款可視化的監(jiān)控分析工具!
VisualVM軟件特色
1、快照分析
我們可以使用VisualVM的快照功能,生成任何性能分析快照,保存在當?shù)?,幫助我們進行性能分析??煺諡樽トPP性能分析數(shù)據(jù)提供了一個非常便捷的方式,因為快照一旦生成,就可以隨時離線打開查看,也可以相互傳播。
VisualVM提供了兩種快照
專業(yè)快照:當一個性能分析對話(內(nèi)存或CPU)正在進行時,我們可以通過性能分析結(jié)果工具欄的快照按鈕生成專業(yè)快照來捕捉當時的性能分析數(shù)據(jù)。
應(yīng)用快照:右鍵點擊左側(cè)應(yīng)用程序窗口的應(yīng)用程序節(jié)點,選擇應(yīng)用程序快照生成應(yīng)用程序快照。應(yīng)用快照在收集某個時刻的堆積轉(zhuǎn)移、線程轉(zhuǎn)移和Profiler快照的同時,也捕獲JVM的基本信息。
2、中央處理器分析
VisualVM可以監(jiān)控應(yīng)用程序在一段時間內(nèi)的CPU使用情況,顯示CPU的使用率、方法的執(zhí)行效率和頻率等相關(guān)數(shù)據(jù),有助于發(fā)現(xiàn)應(yīng)用程序的性能瓶頸。我們可以通過VisualVM的監(jiān)控標簽和Profiler標簽對應(yīng)用程序進行CPU性能分析。
3、內(nèi)存分析
VisualVM可以通過檢測JVM中加載的類別和對象信息等來分析存儲器的使用情況,通過VisualVM的監(jiān)視標簽和Profiler標簽可以對應(yīng)用程序進行存儲器分析。
4、轉(zhuǎn)移功能
線程轉(zhuǎn)移存儲的生成與分析:VisualVM可以生成線程轉(zhuǎn)移存儲在運行中的本地應(yīng)用程序,印刷活動線程的堆棧痕跡,有效理解線程的運行狀況,診斷死鎖、應(yīng)用程序癱瘓等問題。
堆積轉(zhuǎn)移存儲的生成和分析:VisualVM可以生成堆積轉(zhuǎn)移存儲,統(tǒng)計某個特定時刻JVM中的對象信息,分析對象的引用關(guān)系、內(nèi)存是否泄漏等。
5、線程分析
Java語言可以很好地實現(xiàn)多線程應(yīng)用。當我們調(diào)整或開發(fā)多線程應(yīng)用程序后期進行性能調(diào)整時,我們通常需要了解當前程序中所有線程的運行狀態(tài),以及是否有死鎖、熱鎖等情況,從而分析系統(tǒng)可能存在的問題。
VisualVM軟件功能
一、性能分析的主要方式
1、監(jiān)控:監(jiān)控是檢查應(yīng)用程序運行時行為的一般方法。多個視圖分別實時顯示CPU的使用狀況、內(nèi)存的使用狀況、線程狀態(tài)和其他有用的信息,以便用戶能夠立即發(fā)現(xiàn)問題的關(guān)鍵。
2、存儲:性能分析工具從存儲器中獲取當前狀態(tài)數(shù)據(jù),存儲到文件用于靜態(tài)性能分析。Java程序通過在啟動Java程序時添加適當?shù)臈l件參數(shù)來觸發(fā)轉(zhuǎn)移操作。包括以下三種類型:
3、系統(tǒng)轉(zhuǎn)移:JVM生成的當?shù)叵到y(tǒng)轉(zhuǎn)移,也稱為核心轉(zhuǎn)移。一般來說,系統(tǒng)的存儲數(shù)據(jù)量很大,需要與平臺相關(guān)的工具進行分析,如Windows上的windbg和Linux上的gdb。
4、Java轉(zhuǎn)移:JVM內(nèi)部生成的格式化數(shù)據(jù)包括線程信息、類別加載信息和堆積統(tǒng)計數(shù)據(jù)。通常也用于檢測死鎖。
5、堆積存儲:JVM將所有對象的堆積內(nèi)容存儲在文件中。
二、快照
APP啟動后,性能分析工具開始收集各種運行時的數(shù)據(jù),其中有些數(shù)據(jù)直接顯示在監(jiān)視圖中,而且大部分數(shù)據(jù)保存在內(nèi)部,直到用戶要求取得快照,才顯示出基于這些保存的數(shù)據(jù)的統(tǒng)計信息??煺瞻珹PP在一段時間內(nèi)的執(zhí)行信息,通常有CPU快照和內(nèi)存快照兩種。
CPU快照:主要包括應(yīng)用程序函數(shù)的調(diào)用關(guān)系和運行時間,這些信息通??梢栽贑PU快照視圖中查看。
內(nèi)存快照:主要包括內(nèi)存的分配和使用情況、裝載的所有類別、存在的對象信息和對象之間的引用關(guān)系等。這些信息通常可以在內(nèi)存快照視圖中查看。
三、性能分析
性能分析通過收集程序運行時的執(zhí)行數(shù)據(jù),幫助開發(fā)人員優(yōu)化程序所需的部分,提高程序的運行速度和存儲器的使用效率,主要有以下三個方面
CPU性能分析:CPU性能分析的主要目的是統(tǒng)計函數(shù)的調(diào)用狀況和執(zhí)行時間,或者更簡單的情況是統(tǒng)計應(yīng)用程序的CPU使用狀況。通常有CPU監(jiān)控和CPU快照兩種方式來顯示CPU性能分析結(jié)果。
存儲性能分析:存儲性能分析的主要目的是通過統(tǒng)計存儲使用情況來檢測可能存在的存儲泄漏問題,并確定優(yōu)化存儲使用的方向。通常有內(nèi)存監(jiān)控和內(nèi)存快照兩種方式來顯示內(nèi)存性能分析結(jié)果。
線程性能分析:線程性能分析主要用于在多線程應(yīng)用程序中確定存儲器的問題。一般包括線程狀態(tài)的變化狀況、死鎖狀況和某線程在線程生命期內(nèi)狀態(tài)的分布狀況等。
安裝教程
VisualVM 是一個性能分析工具,自從 JDK 6 Update 7 以后已經(jīng)作為 Oracle JDK 的一部分,位于 JDK 根目錄的 bin 文件夾下。VisualVM 自身要在 JDK6 以上的版本上運行,但是它能夠監(jiān)控 JDK1.4 以上版本的應(yīng)用程序。下面主要介紹如何安裝 VisualVM 以及各種 VisualVM 上的插件。
一、安裝VisualVM
1、將 VisualVM 安裝程序解壓縮到本地系統(tǒng)。
2、導(dǎo)航至 VisualVM 安裝目錄的 bin 目錄,然后啟動 jvisualvm.exe。
二、安裝 VisualVM 上的插件
VisualVM 插件中心提供很多插件以供安裝向 VisualVM 添加功能??梢酝ㄟ^ VisualVM 應(yīng)用程序安裝,或者從 VisualVM 插件中心手動下載插件,然后離線安裝。另外,用戶還可以通過下載插件分發(fā)文件 (.nbm 文件 ) 安裝第三方插件為 VisualVM 添加功能。
1、VisualVM 插件中心安裝插件安裝步驟 :
從主菜單中選擇“工具”》“插件”。
在“可用插件”標簽中,選中該插件的“安裝”復(fù)選框。單擊“安裝”。
逐步完成插件安裝程序。
2、從主菜單中選擇“工具”》“插件”。
在“已下載”標簽中,點擊“添加插件”按鈕,選擇已下載的插件分發(fā)文件 (.nbm) 并打開。
選中打開的插件分發(fā)文件,并單擊“安裝”按鈕,逐步完成插件安裝程序。
更新日志
變化
功能和改進。
GH-260: 完全支持在JDK 16上運行并監(jiān)控/描述Java 16進程
GH-262: 增加對蘋果M1的支持
GH-270: 從以前的VisualVM版本導(dǎo)入插件
GH-275: 增加關(guān)于啟用模塊的信息
GH-279: 增加保留尺寸計算的部分進度
GH-254: 更新器的品牌效應(yīng)。
Python的堆棧跟蹤
HeapViewer - 邏輯值增加了Instant, Attributes$Name, FDBigInteger, java.lang.module
HeapViewer - java.util類的邏輯值--集合現(xiàn)在顯示元素的數(shù)量
Gradle的應(yīng)用識別器
更新了JDK工具的應(yīng)用識別器
API變更。
GH-282: 在org.graalvm.visualvm.lib.jfluid.heap包的公共API中添加泛型。
GH-283: 增加了從實例中獲取Heap的方法。
修復(fù)了Bug。
GH-127: G1GC的最大堆不正確
GH-257: "打開快照失敗。"由于沒有完全讀取壓縮數(shù)據(jù)
GH-263: 保留的大小計算為負數(shù)
GH-268: 檢測VisualVM是否在Eclipse OpenJ9上運行
GH-272: 計算引用時沒有進度條
GH-273: NPE:無法調(diào)用 "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的邏輯值固定。
內(nèi)存采樣器--改進了重載下的刷新功能
改進了對IntelliJ應(yīng)用程序的檢測
上一篇:Scraino圖形化編程工具
下一篇:VSCode64位Win安裝包