Java VisualVM是一個(gè)多線程的監(jiān)控分析工具,VisualVM 是一款免費(fèi)的\集成了多個(gè) JDK 命令行工具的可視化工具,它能為您提供強(qiáng)大的分析能力,對(duì) Java 應(yīng)用程序做性能分析和調(diào)優(yōu)。功能包括內(nèi)存分析、快照功能、轉(zhuǎn)儲(chǔ)功能、CPU分析等等,系統(tǒng)管理員可以利用它來(lái)監(jiān)測(cè)、控制Java應(yīng)用程序橫跨整個(gè)網(wǎng)絡(luò)的情況。
它集成了多個(gè)JDK命令工具的一個(gè)可視化工具,它主要用來(lái)監(jiān)控JVM的運(yùn)行情況,可以用它來(lái)查看和瀏覽Heap Dump、Thread Dump、內(nèi)存對(duì)象實(shí)例情況、GC執(zhí)行情況、CPU消耗以及類的裝載情況。 Java開(kāi)發(fā)人員可以使用 VisualVM創(chuàng)建必要信息的日志,系統(tǒng)管理人員可用來(lái)監(jiān)控及控制Java應(yīng)用程序在網(wǎng)絡(luò)中的運(yùn)行狀況。
JDK 8 8u121:http://www.innovatechautomation.com/soft/79926.html
JDK1.6開(kāi)始自帶的VisualVM就是不錯(cuò)的監(jiān)控工具.
這個(gè)工具就在JAVA_HOME\bin\目錄下的jvisualvm.exe, 雙擊這個(gè)文件就能看到一個(gè)比較直觀的界面
JDK 8 64位版:http://www.innovatechautomation.com/soft/33894.html
什么是VisualVM
VisualVM是JDK的一個(gè)集成的分析工具,自從JDK 6 Update 7以后已經(jīng)作為Sun的JDK的一部分。
VisualVM可以做的:監(jiān)控應(yīng)用程序的性能和內(nèi)存占用情況、監(jiān)控應(yīng)用程序的線程、進(jìn)行線程轉(zhuǎn)儲(chǔ)(Thread Dump)或堆轉(zhuǎn)儲(chǔ)(Heap Dump)、跟蹤內(nèi)存泄漏、監(jiān)控垃圾回收器、執(zhí)行內(nèi)存和CPU分析,保存快照以便脫機(jī)分析應(yīng)用程序;同時(shí)它還支持在MBeans上進(jìn)行瀏覽和操作。盡管 VisualVM自身要在JDK6以上的運(yùn)行,但是JDK1.4以上版本的程序它都能被它監(jiān)控。
在JDK1.6.07以上的版本中:到$JAVA_HOME/bin,點(diǎn)擊jvisualvm.exe圖標(biāo)就可以啟動(dòng)VisualVM;當(dāng)然也可以點(diǎn)擊這里獲取官方的最新版本,支持:英文,中文,日文。
VisualVM功能集成較多,我們這里只討論它對(duì)象線程的監(jiān)控分析。
VisualVM監(jiān)控線程
當(dāng)我們運(yùn)行VisualVM的時(shí)候,可以在應(yīng)用程序》本地中看到VisualVM和eclipse的運(yùn)行程序,然后我們啟動(dòng)eclipse中的一個(gè)線程:com.longtask.thread.TestVisualVm,可以看到在菜單中多了一個(gè)該線程的顯示。點(diǎn)擊右邊的 線程 菜單,可以看到線程運(yùn)行的跟蹤情況。
點(diǎn)擊 thread dump,可以生成該線程的運(yùn)行情況的tdump文件,通過(guò)thread dump提供的相關(guān)信息,我們可以看到線程在什么地方被阻塞了以及線程的其他狀態(tài)。
把日志另存為文件,到Thread Dump Analyzer的主頁(yè)點(diǎn)擊圖標(biāo)下載TDA,然后用TDA打開(kāi)剛才VisualVM保存的 thread dump文件,查看相關(guān)的分析結(jié)果。
安裝 VisualVM 上的插件
VisualVM 插件中心提供很多插件以供安裝向 VisualVM 添加功能?梢酝ㄟ^(guò) VisualVM 應(yīng)用程序安裝,或者從 VisualVM 插件中心手動(dòng)下載插件,然后離線安裝。另外,用戶還可以通過(guò)下載插件分發(fā)文件 (.nbm 文件 ) 安裝第三方插件為 VisualVM 添加功能。
從 VisualVM 插件中心安裝插件安裝步驟 :
從主菜單中選擇“工具”>“插件”。
在“可用插件”標(biāo)簽中,選中該插件的“安裝”復(fù)選框。單擊“安裝”。
逐步完成插件安裝程序。
圖 1. VisualVM 插件管理器
根據(jù) .nbm 文件安裝第三方插件安裝步驟 :
從主菜單中選擇“工具”>“插件”。
在“已下載”標(biāo)簽中,點(diǎn)擊"添加插件"按鈕,選擇已下載的插件分發(fā)文件 (.nbm) 并打開(kāi)。
選中打開(kāi)的插件分發(fā)文件,并單擊"安裝"按鈕,逐步完成插件安裝程序。
圖 2. 通過(guò) .nbm 文件安裝 VisualVM 插件
功能介紹
內(nèi)存分析
VisualVM 通過(guò)檢測(cè) JVM 中加載的類和對(duì)象信息等幫助我們分析內(nèi)存使用情況,我們可以通過(guò) VisualVM 的監(jiān)視標(biāo)簽和 Profiler 標(biāo)簽對(duì)應(yīng)用程序進(jìn)行內(nèi)存分析。
線程分析
Java 語(yǔ)言能夠很好的實(shí)現(xiàn)多線程應(yīng)用程序。當(dāng)我們對(duì)一個(gè)多線程應(yīng)用程序進(jìn)行調(diào)試或者開(kāi)發(fā)后期做性能調(diào)優(yōu)的時(shí)候,往往需要了解當(dāng)前程序中所有線程的運(yùn)行狀態(tài),是否有死鎖、熱鎖等情況的發(fā)生,從而分析系統(tǒng)可能存在的問(wèn)題。
快照功能
我們可以使用 VisualVM 的快照功能生成任意個(gè)性能分析快照并保存到本地來(lái)輔助我們進(jìn)行性能分析。快照為捕獲應(yīng)用程序性能分析數(shù)據(jù)提供了一個(gè)很便捷的方式因?yàn)榭煺找坏┥煽梢栽谌魏螘r(shí)候離線打開(kāi)和查看,也可以相互傳閱。
轉(zhuǎn)儲(chǔ)功能
線程轉(zhuǎn)儲(chǔ)的生成與分析
VisualVM 能夠?qū)φ谶\(yùn)行的本地應(yīng)用程序生成線程轉(zhuǎn)儲(chǔ),把活動(dòng)線程的堆棧蹤跡打印出來(lái),幫助我們有效了解線程運(yùn)行的情況,診斷死鎖、應(yīng)用程序癱瘓等問(wèn)題。
CPU 分析
VisualVM 能夠監(jiān)控應(yīng)用程序在一段時(shí)間的 CPU 的使用情況,顯示 CPU 的使用率、方法的執(zhí)行效率和頻率等相關(guān)數(shù)據(jù)幫助我們發(fā)現(xiàn)應(yīng)用程序的性能瓶頸。我們可以通過(guò) VisualVM 的監(jiān)視標(biāo)簽和 Profiler 標(biāo)簽對(duì)應(yīng)用程序進(jìn)行 CPU 性能分析。
更新日志
變化
功能和改進(jìn)。
GH-260: 完全支持在JDK 16上運(yùn)行并監(jiān)控/描述Java 16進(jìn)程
GH-262: 增加對(duì)蘋果M1的支持
GH-270: 從以前的VisualVM版本導(dǎo)入插件
GH-275: 增加關(guān)于啟用模塊的信息
GH-279: 增加保留尺寸計(jì)算的部分進(jìn)度
GH-254: 更新器的品牌效應(yīng)。
Python的堆棧跟蹤
HeapViewer - 邏輯值增加了Instant, Attributes$Name, FDBigInteger, java.lang.module
HeapViewer - java.util類的邏輯值--集合現(xiàn)在顯示元素的數(shù)量
Gradle的應(yīng)用識(shí)別器
更新了JDK工具的應(yīng)用識(shí)別器
API變更。
GH-282: 在org.graalvm.visualvm.lib.jfluid.heap包的公共API中添加泛型。
GH-283: 增加了從實(shí)例中獲取Heap的方法。
修復(fù)了Bug。
GH-127: G1GC的最大堆不正確
GH-257: "打開(kāi)快照失敗。"由于沒(méi)有完全讀取壓縮數(shù)據(jù)
GH-263: 保留的大小計(jì)算為負(fù)數(shù)
GH-268: 檢測(cè)VisualVM是否在Eclipse OpenJ9上運(yùn)行
GH-272: 計(jì)算引用時(shí)沒(méi)有進(jìn)度條
GH-273: NPE:無(wú)法調(diào)用 "java.lang.management.MemoryMXBean.gc()"
GH-274: 邏輯值:'...'被添加到完整的字符串中
GH-276: 缺少已知的阻塞方法
GH-277: 不正確的水平滾動(dòng)
GH-278:LongBuffer.startReading()處的NPE。
GH-280: 在MacOS上選擇背景顏色不正確
HeapViewer--PythonModule、SourceImpl$Key、InetSocketAddress、BigDecimal的邏輯值固定。
內(nèi)存采樣器--改進(jìn)了重載下的刷新功能
改進(jìn)了對(duì)IntelliJ應(yīng)用程序的檢測(cè)