1. 程式人生 > >VisualVM--Java效能監控分析工具

VisualVM--Java效能監控分析工具

    VisualVM是JDK的一個整合的分析工具,自從JDK 6 Update 7以後已經作為Sun的JDK的一部分。

    VisualVM可以做的:監控應用程式的效能和記憶體佔用情況、監控應用程式的執行緒、進行執行緒轉儲(Thread Dump)或堆轉儲(Heap Dump)、跟蹤記憶體洩漏、監控垃圾回收器、執行記憶體和CPU分析,儲存快照以便離線分析應用程式;同時它還支援在MBeans上進行瀏覽和操作。儘管 VisualVM自身要在JDK6以上的執行,但是JDK1.4以上版本的程式它都能被它監控。

    在JDK1.6.07以上的版本中:到$JAVA_HOME/bin,點選jvisualvm.exe圖示就可以啟動VisualVM;當然也可以點選

這裡獲取官方的最新版本,支援:英文,中文,日文。

    VisualVM功能整合較多,我們這裡只討論它物件執行緒的監控分析。

一、VisualVM監控執行緒

當我們執行VisualVM的時候,可以在應用程式》本地中看到VisualVM和eclipse的執行程式,然後我們啟動eclipse中的一個線 程:com.longtask.thread.TestVisualVm,可以看到在選單中多了一個該執行緒的顯示。點選右邊的 執行緒 選單,可以看到執行緒執行的跟蹤情況。

點選 thread dump,可以生成該執行緒的執行情況的tdump檔案,通過thread dump提供的相關資訊,我們可以看到執行緒在什麼地方被阻塞了以及執行緒的其他狀態。

把日誌另存為檔案,到Thread Dump Analyzer的主頁點選圖示下載TDA,然後用TDA開啟剛才VisualVM儲存的 thread dump檔案,檢視相關的分析結果。

我們也可以用VisualVM來監控遠端java執行緒的執行情況。

二、遠端監控:啟動RMI服務

 1:新建一個jstatd.all.policy檔案,在裡面新增以下內容來保證jstatd服務啟動的時候不報異常:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

    2:netstat -ano | grep -i 1099 檢視1099埠是否被佔用了,如果被佔用,則需要選擇其他埠來啟動jstatd服務

    3:如果埠被佔用,用以下方式啟動jstatd服務:

    rmiregistry 2020 & jstatd -J-Djava.security.policy=jstatd.all.policy -p 2020

    更多jstatd的文件請參考sun公司的官方文件 這裡

三、遠端監控Jboos服務

1:在Jboss的啟動檔案中新增以下資訊:

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="2899" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"

2:檢查啟動情況:
    netstat -a | grep -i 2899 檢視端口占有情況
    如果2899埠被其他程式佔用,在jboss配置檔案中調整埠-Dcom.sun.management.jmxremote.port=****

而後在VisualVM中就新增遠端連線,選擇jmx方式,就可以監控jboss的執行情況了。

3:連線tomcat配置相同