VisualVM功能介紹
一、性能分析的主要方式
1.監(jiān)視:監(jiān)視是一種用來查看應(yīng)用程序運行時行為的一般方法。通常會有多個視圖(View)分別實時地顯示 CPU 使用情況、內(nèi)存使用情況、線程狀態(tài)以及其他一些有用的信息,以便用戶能很快地發(fā)現(xiàn)問題的關(guān)鍵所在。
2.轉(zhuǎn)儲:性能分析工具從內(nèi)存中獲得當前狀態(tài)數(shù)據(jù)并存儲到文件用于靜態(tài)的性能分析。Java 程序是通過在啟動 Java 程序時添加適當?shù)臈l件參數(shù)來觸發(fā)轉(zhuǎn)儲操作的。它包括以下三種:
系統(tǒng)轉(zhuǎn)儲:JVM 生成的本地系統(tǒng)的轉(zhuǎn)儲,又稱作核心轉(zhuǎn)儲。一般的,系統(tǒng)轉(zhuǎn)儲數(shù)據(jù)量大,需要平臺相關(guān)的工具去分析,如 Windows 上的 windbg 和 Linux 上的 gdb.
Java 轉(zhuǎn)儲:JVM 內(nèi)部生成的格式化后的數(shù)據(jù),包括線程信息,類的加載信息以及堆的統(tǒng)計數(shù)據(jù)。通常也用于檢測死鎖。
堆轉(zhuǎn)儲:JVM 將所有對象的堆內(nèi)容存儲到文件。
二、快照:
應(yīng)用程序啟動后,性能分析工具開始收集各種運行時數(shù)據(jù),其中一些數(shù)據(jù)直接顯示在監(jiān)視視圖中,而另外大部分數(shù)據(jù)被保存在內(nèi)部,直到用戶要求獲取快照,基于這些保存的數(shù)據(jù)的統(tǒng)計信息才被顯示出來??煺瞻藨?yīng)用程序在一段時間內(nèi)的執(zhí)行信息,通常有 CPU 快照和內(nèi)存快照兩種類型。
CPU 快照:主要包含了應(yīng)用程序中函數(shù)的調(diào)用關(guān)系及運行時間,這些信息通??梢栽?CPU 快照視圖中進行查看。
內(nèi)存快照:主要包含了內(nèi)存的分配和使用情況、載入的所有類、存在的對象信息及對象間的引用關(guān)系等。這些信息通??梢栽趦?nèi)存快照視圖中進行查看。
三、性能分析:
性能分析是通過收集程序運行時的執(zhí)行數(shù)據(jù)來幫助開發(fā)人員定位程序需要被優(yōu)化的部分,從而提高程序的運行速度或是內(nèi)存使用效率,主要有以下三個方面:
CPU 性能分析:CPU 性能分析的主要目的是統(tǒng)計函數(shù)的調(diào)用情況及執(zhí)行時間,或者更簡單的情況就是統(tǒng)計應(yīng)用程序的 CPU 使用情況。通常有 CPU 監(jiān)視和 CPU 快照兩種方式來顯示 CPU 性能分析結(jié)果。
內(nèi)存性能分析:內(nèi)存性能分析的主要目的是通過統(tǒng)計內(nèi)存使用情況檢測可能存在的內(nèi)存泄露問題及確定優(yōu)化內(nèi)存使用的方向。通常有內(nèi)存監(jiān)視和內(nèi)存快照兩種方式來顯示內(nèi)存性能分析結(jié)果。
線程性能分析:線程性能分析主要用于在多線程應(yīng)用程序中確定內(nèi)存的問題所在。一般包括線程的狀態(tài)變化情況,死鎖情況和某個線程在線程生命期內(nèi)狀態(tài)的分布情況等
VisualVM軟件特色
1、內(nèi)存分析
VisualVM 通過檢測 JVM 中加載的類和對象信息等幫助我們分析內(nèi)存使用情況,我們可以通過 VisualVM 的監(jiān)視標簽和 Profiler 標簽對應(yīng)用程序進行內(nèi)存分析。
2、CPU 分析
VisualVM 能夠監(jiān)控應(yīng)用程序在一段時間的 CPU 的使用情況,顯示 CPU 的使用率、方法的執(zhí)行效率和頻率等相關(guān)數(shù)據(jù)幫助我們發(fā)現(xiàn)應(yīng)用程序的性能瓶頸。我們可以通過 VisualVM 的監(jiān)視標簽和 Profiler 標簽對應(yīng)用程序進行 CPU 性能分析。
3、線程分析
Java 語言能夠很好的實現(xiàn)多線程應(yīng)用程序。當我們對一個多線程應(yīng)用程序進行調(diào)試或者開發(fā)后期做性能調(diào)優(yōu)的時候,往往需要了解當前程序中所有線程的運行狀態(tài),是否有死鎖、熱鎖等情況的發(fā)生,從而分析系統(tǒng)可能存在的問題。
4、快照分析
我們可以使用 VisualVM 的快照功能生成任意個性能分析快照并保存到本地來輔助我們進行性能分析??煺諡椴东@應(yīng)用程序性能分析數(shù)據(jù)提供了一個很便捷的方式因為快照一旦生成可以在任何時候離線打開和查看,也可以相互傳閱。
VisualVM 提供了兩種類型的快照:
Profiler 快照:當有一個性能分析會話(內(nèi)存或者 CPU)正在進行時,我們可以通過性能分析結(jié)果工具欄的“快照”按鈕生成 Profiler 快照捕獲當時的性能分析數(shù)據(jù)。
應(yīng)用程序快照:我們可以右鍵點擊左側(cè) Applications 窗口中應(yīng)用程序節(jié)點,選擇“應(yīng)用程序快照”為生成一個應(yīng)用程序快照。應(yīng)用程序快照會收集某一時刻的堆轉(zhuǎn)儲,線程轉(zhuǎn)儲和 Profiler 快照,同時也會捕獲 JVM 的一些基本信息。
5、轉(zhuǎn)儲功能
線程轉(zhuǎn)儲的生成與分析:VisualVM 能夠?qū)φ谶\行的本地應(yīng)用程序生成線程轉(zhuǎn)儲,把活動線程的堆棧蹤跡打印出來,幫助我們有效了解線程運行的情況,診斷死鎖、應(yīng)用程序癱瘓等問題。
堆轉(zhuǎn)儲的生成與分析:VisualVM 能夠生成堆轉(zhuǎn)儲,統(tǒng)計某一特定時刻 JVM 中的對象信息,幫助我們分析對象的引用關(guān)系、是否有內(nèi)存泄漏情況的發(fā)生等。
VisualVM安裝步驟
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ā)文件,并單擊"安裝"按鈕,逐步完成插件安裝程序。
VisualVM常見問題
依賴缺失
問題描述:新手在嘗試構(gòu)建VisualVM項目時,可能會遇到依賴缺失的問題,例如缺少Apache Ant或Oracle JDK。
解決方案:
確保已安裝Apache Ant 1.9.15或更高版本,可以從Apache Ant官網(wǎng)下載并安裝。
確保已安裝Oracle JDK 8,可以從Oracle官網(wǎng)下載并安裝。
將Ant和JDK的安裝路徑添加到系統(tǒng)的環(huán)境變量中,確保命令行工具可以識別這些路徑。
VisualVM更新日志
變化
功能和改進。
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)用程序的檢測
華軍小編推薦:
VisualVM這款軟件完全傻瓜式操作,超級簡單,另外小編還推薦JUDE、jarfix、Argo UML、Apache Tomcat 9、WinPack等相關(guān)軟件下載使用。
您的評論需要經(jīng)過審核才能顯示
有用
有用
有用