VisualVM是一種Java虛擬機(jī)(Java Virtual Machine, JVM)監(jiān)視和分析工具,可用于診斷和解決Java應(yīng)用程序的性能問題。VisualVM提供了一系列功能,包括CPU、內(nèi)存、線程和類加載的監(jiān)視、分析和操作。VisualVM可以幫助開發(fā)人員更好地理解Java應(yīng)用程序的狀態(tài)和性能,以便更好地優(yōu)化和調(diào)試Java應(yīng)用程序。VisualVM支持本地應(yīng)用程序和遠(yuǎn)程進(jìn)程,并且具有插件架構(gòu),可以根據(jù)需要進(jìn)行擴(kuò)展。有需要的用戶快通過下面地址來獲取吧!
VisualVM如何使用
解壓縮后打開bin文件夾,運行“visualvm.exe”即可使用。
VisualVM功能
監(jiān)視:監(jiān)視是一種用來查看應(yīng)用程序運行時行為的一般方法。通常會有多個視圖(View)分別實時地顯示 CPU 使用情況、內(nèi)存使用情況、線程狀態(tài)以及其他一些有用的信息,以便用戶能很快地發(fā)現(xiàn)問題的關(guān)鍵所在。
轉(zhuǎn)儲:性能分析工具從內(nèi)存中獲得當(dāng)前狀態(tài)數(shù)據(jù)并存儲到文件用于靜態(tài)的性能分析。Java 程序是通過在啟動 Java 程序時添加適當(dāng)?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)視視圖中,而另外大部分?jǐ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 快照視圖中進(jìn)行查看。
內(nèi)存快照:主要包含了內(nèi)存的分配和使用情況、載入的所有類、存在的對象信息及對象間的引用關(guān)系等。這些信息通常可以在內(nèi)存快照視圖中進(jìn)行查看。
性能分析:性能分析是通過收集程序運行時的執(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優(yōu)勢介紹
內(nèi)存分析
VisualVM 通過檢測 JVM 中加載的類和對象信息等幫助我們分析內(nèi)存使用情況,我們可以通過 VisualVM 的監(jiān)視標(biāo)簽和 Profiler 標(biāo)簽對應(yīng)用程序進(jìn)行內(nèi)存分析。
在監(jiān)視標(biāo)簽內(nèi),我們可以看到實時的應(yīng)用程序內(nèi)存堆以及永久保留區(qū)域的使用情況。

此外,我們也可以通過 Applications 窗口右擊應(yīng)用程序節(jié)點來啟用“在出現(xiàn) OOME 時生成堆 Dump”功能,當(dāng)應(yīng)用程序出現(xiàn) OutOfMemory 例外時,VisualVM 將自動生成一個堆轉(zhuǎn)儲。
在 Profiler 標(biāo)簽,點擊“內(nèi)存”按鈕將啟動一個內(nèi)存分析會話,等 VisualVM 收集和統(tǒng)計完相關(guān)性能數(shù)據(jù)信息,將會顯示在性能分析結(jié)果。通過內(nèi)存性能分析結(jié)果,我們可以查看哪些對象占用了較多的內(nèi)存,存活的時間比較長等,以便做進(jìn)一步的優(yōu)化。
此外,我們可以通過性能分析結(jié)果下方的類名過濾器對分析結(jié)果進(jìn)行過濾。
CPU 分析
VisualVM 能夠監(jiān)控應(yīng)用程序在一段時間的 CPU 的使用情況,顯示 CPU 的使用率、方法的執(zhí)行效率和頻率等相關(guān)數(shù)據(jù)幫助我們發(fā)現(xiàn)應(yīng)用程序的性能瓶頸。我們可以通過 VisualVM 的監(jiān)視標(biāo)簽和 Profiler 標(biāo)簽對應(yīng)用程序進(jìn)行 CPU 性能分析。
在監(jiān)視標(biāo)簽內(nèi),我們可以查看 CPU 的使用率以及垃圾回收活動對性能的影響。過高的 CPU 使用率可能是由于我們的項目中存在低效的代碼,可以通過 Profiler 標(biāo)簽的 CPU 性能分析功能進(jìn)行詳細(xì)的分析。如果垃圾回收活動過于頻繁,占用了較高的 CPU 資源,可能是由內(nèi)存不足或者是新生代和舊生代分配不合理導(dǎo)致的等。

在 Profiler 標(biāo)簽,點擊“CPU”按鈕啟動一個 CPU 性能分析會話 ,VisualVM 會檢測應(yīng)用程序所有的被調(diào)用的方法。當(dāng)進(jìn)入一個方法時,線程會發(fā)出一個“method entry”的事件,當(dāng)退出方法時同樣會發(fā)出一個“method exit”的事件,這些事件都包含了時間戳。然后 VisualVM 會把每個被調(diào)用方法的總的執(zhí)行時間和調(diào)用的次數(shù)按照運行時長展示出來。
此外,我們也可以通過性能分析結(jié)果下方的方法名過濾器對分析結(jié)果進(jìn)行過濾。
線程分析
Java 語言能夠很好的實現(xiàn)多線程應(yīng)用程序。當(dāng)我們對一個多線程應(yīng)用程序進(jìn)行調(diào)試或者開發(fā)后期做性能調(diào)優(yōu)的時候,往往需要了解當(dāng)前程序中所有線程的運行狀態(tài),是否有死鎖、熱鎖等情況的發(fā)生,從而分析系統(tǒng)可能存在的問題。

在 VisualVM 的監(jiān)視標(biāo)簽內(nèi),我們可以查看當(dāng)前應(yīng)用程序中所有活動線程和守護(hù)線程的數(shù)量等實時信息。
VisualVM 的線程標(biāo)簽提供了三種視圖,默認(rèn)會以時間線的方式展現(xiàn)。另外兩種視圖分別是表視圖和詳細(xì)信息視圖。
時間線視圖上方的工具欄提供了縮小,放大和自適應(yīng)三個按鈕,以及一個下拉框,我們可以選擇將所有線程、活動線程或者完成的線程顯示在視圖中。

應(yīng)用程序快照:我們可以右鍵點擊左側(cè) Applications 窗口中應(yīng)用程序節(jié)點,選擇“應(yīng)用程序快照”為生成一個應(yīng)用程序快照。應(yīng)用程序快照會收集某一時刻的堆轉(zhuǎn)儲,線程轉(zhuǎn)儲和 Profiler 快照,同時也會捕獲 JVM 的一些基本信息。

堆轉(zhuǎn)儲的摘要包括轉(zhuǎn)儲的文件大小、路徑等基本信息,運行的系統(tǒng)環(huán)境信息,也可以顯示所有的線程信息。
特點
監(jiān)視和分析功能:VisualVM提供了各種圖形化和表格化的監(jiān)視和分析工具,包括CPU、內(nèi)存、線程、類加載、垃圾回收等方面的監(jiān)視和分析功能。
插件架構(gòu):VisualVM支持插件架構(gòu),可以根據(jù)需要擴(kuò)展功能。
內(nèi)存分析:VisualVM提供了內(nèi)存分析功能,可用于檢測內(nèi)存泄漏等問題。
線程分析:VisualVM提供了線程分析功能,可以幫助開發(fā)人員診斷和解決線程問題。
JMX支持:VisualVM支持Java管理擴(kuò)展(JMX),可以以圖形化方式監(jiān)控和管理遠(yuǎn)程進(jìn)程。
kkx小編給大家分享的VisualVM是一款非常實用的Java虛擬機(jī)監(jiān)視和分析工具,可以幫助開發(fā)人員更好地優(yōu)化和調(diào)試Java應(yīng)用程序,希望KKX給大家分享的VisualVM監(jiān)控工具可以幫到大家!