Java VisualVM是一個多線程的監(jiān)控分析工具,VisualVM 是一款免費的\集成了多個 JDK 命令行工具的可視化工具,它能為您提供強大的分析能力,對 Java 應(yīng)用程序做性能分析和調(diào)優(yōu)。功能包括內(nèi)存分析、快照功能、轉(zhuǎn)儲功能、CPU分析等等,系統(tǒng)管理員可以利用它來監(jiān)測、控制Java應(yīng)用程序橫跨整個網(wǎng)絡(luò)的情況。
它集成了多個JDK命令工具的一個可視化工具,它主要用來監(jiān)控JVM的運行情況,可以用它來查看和瀏覽Heap Dump、Thread Dump、內(nèi)存對象實例情況、GC執(zhí)行情況、CPU消耗以及類的裝載情況。 Java開發(fā)人員可以使用 VisualVM創(chuàng)建必要信息的日志,系統(tǒng)管理人員可用來監(jiān)控及控制Java應(yīng)用程序在網(wǎng)絡(luò)中的運行狀況。
JDK 8 8u121:http://elephantinaurance.com/soft/79926.html
JDK1.6開始自帶的VisualVM就是不錯的監(jiān)控工具.
這個工具就在JAVA_HOME\bin\目錄下的jvisualvm.exe, 雙擊這個文件就能看到一個比較直觀的界面
JDK 8 64位版:http://elephantinaurance.com/soft/33894.html
什么是VisualVM
VisualVM是JDK的一個集成的分析工具,自從JDK 6 Update 7以后已經(jīng)作為Sun的JDK的一部分。
VisualVM可以做的:監(jiān)控應(yīng)用程序的性能和內(nèi)存占用情況、監(jiān)控應(yīng)用程序的線程、進行線程轉(zhuǎn)儲(Thread Dump)或堆轉(zhuǎn)儲(Heap Dump)、跟蹤內(nèi)存泄漏、監(jiān)控垃圾回收器、執(zhí)行內(nèi)存和CPU分析,保存快照以便脫機分析應(yīng)用程序;同時它還支持在MBeans上進行瀏覽和操作。盡管 VisualVM自身要在JDK6以上的運行,但是JDK1.4以上版本的程序它都能被它監(jiān)控。
在JDK1.6.07以上的版本中:到$JAVA_HOME/bin,點擊jvisualvm.exe圖標(biāo)就可以啟動VisualVM;當(dāng)然也可以點擊這里獲取官方的最新版本,支持:英文,中文,日文。
VisualVM功能集成較多,我們這里只討論它對象線程的監(jiān)控分析。
VisualVM監(jiān)控線程
當(dāng)我們運行VisualVM的時候,可以在應(yīng)用程序》本地中看到VisualVM和eclipse的運行程序,然后我們啟動eclipse中的一個線程:com.longtask.thread.TestVisualVm,可以看到在菜單中多了一個該線程的顯示。點擊右邊的 線程 菜單,可以看到線程運行的跟蹤情況。
點擊 thread dump,可以生成該線程的運行情況的tdump文件,通過thread dump提供的相關(guān)信息,我們可以看到線程在什么地方被阻塞了以及線程的其他狀態(tài)。
把日志另存為文件,到Thread Dump Analyzer的主頁點擊圖標(biāo)下載TDA,然后用TDA打開剛才VisualVM保存的 thread dump文件,查看相關(guān)的分析結(jié)果。
安裝 VisualVM 上的插件
VisualVM 插件中心提供很多插件以供安裝向 VisualVM 添加功能?梢酝ㄟ^ VisualVM 應(yīng)用程序安裝,或者從 VisualVM 插件中心手動下載插件,然后離線安裝。另外,用戶還可以通過下載插件分發(fā)文件 (.nbm 文件 ) 安裝第三方插件為 VisualVM 添加功能。
從 VisualVM 插件中心安裝插件安裝步驟 :
從主菜單中選擇“工具”>“插件”。
在“可用插件”標(biāo)簽中,選中該插件的“安裝”復(fù)選框。單擊“安裝”。
逐步完成插件安裝程序。
圖 1. VisualVM 插件管理器
根據(jù) .nbm 文件安裝第三方插件安裝步驟 :
從主菜單中選擇“工具”>“插件”。
在“已下載”標(biāo)簽中,點擊"添加插件"按鈕,選擇已下載的插件分發(fā)文件 (.nbm) 并打開。
選中打開的插件分發(fā)文件,并單擊"安裝"按鈕,逐步完成插件安裝程序。
圖 2. 通過 .nbm 文件安裝 VisualVM 插件
功能介紹
內(nèi)存分析
VisualVM 通過檢測 JVM 中加載的類和對象信息等幫助我們分析內(nèi)存使用情況,我們可以通過 VisualVM 的監(jiān)視標(biāo)簽和 Profiler 標(biāo)簽對應(yīng)用程序進行內(nèi)存分析。
線程分析
Java 語言能夠很好的實現(xiàn)多線程應(yīng)用程序。當(dāng)我們對一個多線程應(yīng)用程序進行調(diào)試或者開發(fā)后期做性能調(diào)優(yōu)的時候,往往需要了解當(dāng)前程序中所有線程的運行狀態(tài),是否有死鎖、熱鎖等情況的發(fā)生,從而分析系統(tǒng)可能存在的問題。
快照功能
我們可以使用 VisualVM 的快照功能生成任意個性能分析快照并保存到本地來輔助我們進行性能分析?煺諡椴东@應(yīng)用程序性能分析數(shù)據(jù)提供了一個很便捷的方式因為快照一旦生成可以在任何時候離線打開和查看,也可以相互傳閱。
轉(zhuǎn)儲功能
線程轉(zhuǎn)儲的生成與分析
VisualVM 能夠?qū)φ谶\行的本地應(yīng)用程序生成線程轉(zhuǎn)儲,把活動線程的堆棧蹤跡打印出來,幫助我們有效了解線程運行的情況,診斷死鎖、應(yīng)用程序癱瘓等問題。
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)用程序進行 CPU 性能分析。
更新日志
變化
功能和改進。
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)用程序的檢測