JVisualVM是由Sun提供的性能分析工具,如此強大的後盾怎能不強大?在Jdk6.0以後的版本中是自帶的,配置好環境變量然後在運行中輸入“JVisualVm”或直接到Jdk的安裝目錄的Bin目錄下找到運行程序即可運行。如果是用Jdk1.5或以前版本的朋友就得要單獨安裝了。
我覺得其還有一個強大的地方就是不需要用代理啟動(即如果要監視某個程序則需要用測試軟件來運行程序方便其監視如YourKit這款同類的測試工具)的方式來運行,十分方便,只要是用Jdk環境運行的,打開此測試工具後即能看到並監視程度的運行狀態,當然前提是要運行在同一個Jdk的環境中。
地址:https://visualvm.dev.java.net/
連接
1、本地機器的程序直接可以監聽到
2、遠程機器的程序需要加上JVM參數
-Dcom.sun.management.jmxremote= true
-Dcom.sun.management.jmxremote.port= 9090
-Dcom.sun.management.jmxremote.ssl= false
-Dcom.sun.management.jmxremote.authenticate= false
備註:另外需要檢查
hostname i
看解析出來是否為本地的IP,如是127.0.0.1或者IP為多個IP中之一,則其他的IP無效,會連接不上。
這裡有個分析案例,利用jvisualvm分析tomcat的問題:
http://blog.tty.nl/2010/09/03/using-visualvm-to-fix-live-tomcat-and-jvm-problems
插件安裝
tools->plugin->Available Plugin 會有值得安裝的插件,如:VisualGC JConsole
插件列表:https://visualvm.dev.java.net/plugins.html
注意:上面提供的端口配置有些麻煩,不如直接這樣做:
要使用VisualGC 必須在遠程機上啟動jstatd代理程序,否則會顯示“not supported for this jvm” 錯誤而啟動jstatd 時會有一個權限問題,需要做如下修改:
nano /opt/sun-jdk- 1.6 . 0.26 /jre/lib/security/java.policy
複製代碼代碼如下:
nano /opt/sun-jdk-1.6.0.26/jre/lib/security/java.policy
增加下列行
複製代碼代碼如下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
然後啟動jstatd並且不要關閉
如:
Threads
查看線程的運行情況,運行、停止、睡眠、等待,根據這些結合實際程序運行的邏輯分析。
找到可疑份子,可以Thread Dump 找出具體是哪個線程在作祟。
參看這個例子:http://blog.tty.nl/2010/09/03/using-visualvm-to-fix-live-tomcat-and-jvm-problems
關於如何使用,如何分析程序,可以參看這個例子:http://www.baptiste-wicht.com/2010/07/profile-applications-java-visualvm