VisualVM(All-in-One Java Trouble shootingTool)是到目前為止隨JDK發布的功能最強大的運行監視和故障處理程序,並且可以預見在未來一段時間內都是官方主力發展的虛擬機故障處理工具。
官方在VisualVM的軟件說明中寫上了“All-in-One”的描述字樣,預示着它除了運行監視、故障處理外,還提供了很多其他方面的功能。如性能分析Profiling),VisualVM的性能分析功能甚至比起JProfiler、YourKit等專業且收費的Profiling工具都不會遜色多少,而且VisualVM的還有一個很大的優點:不需要被監視的程序基於特殊Agent運行,因此它對應用程序的實際性能的影響很小,使得它可以直接應用在生產環境中。這個優點是JProfiler、YourKit等工具無法與之媲美的。
在命令行輸入jvisualvm:
可以直接看到本地啟動了那些java線程,同樣jvisualvm 也支持遠程連接,遠程連接遠程配置參考上一篇博客(JVM的監控工具之jconsole):https://www.cnblogs.com/cheng21553516/p/11241237.html
本地連接遠程如下所示:
首先輸入遠程的主機名以及顯示名稱:
接下來是右鍵添加JMX鏈接:
如圖配置:
可以正常鏈接到遠程:可以看到遠程的tomcat進程信息:
VisualVM能做到什么?VisualVM可以做到:
1、顯示虛擬機進程以及進程的配置、環境信息(jps、jinfo)。
2、監視應用程序的CPU、GC、堆、方法區以及線程的信息(jstat、jstack)。
3、dump以及分析堆轉儲快照(jmap、jhat)。
4、方法級的程序運行性能分析,找出被調用最多、運行時間最長的方法。
5、離線程序快照:收集程序的運行時配置、線程dump、內存dump等信息建立一個快照,可以將快照發送開發者處進行Bug反饋。
面板各項參數作用介紹:
和JConsole差不多,很多顯示的東西都是重合的JVM參數和我們用jps輸出的是一樣的,系統屬性和我們用命令jinfo -sysprops看到的是一樣的。如圖所示:
概述頁簽可以看到java 進程的一些屬性參數和JVM參數:
(2)監視
和我們的JConsole界面顯示的很類似對吧。堆的大小、元數據空間的大小等等。堆dump就是可以導出我們當前線程的堆轉儲文件,其實就相當於我們jdk的命令行中執行jmap的命令。
如圖所示:監視頁簽可以從CPU占用,堆內存占用,元數據空間大小,以及線程數等維度進行監控,同樣也可以進行來及回收,對快照分析等:
(3)線程
同樣也有Dump,同樣是和我們JDK命令行工具的jstack是一樣的操作。可以生成虛擬機當前時刻的線程快照。如圖所示:
線程頁簽可以從線程的狀態,以及線程快照進行分析: