Java自帶的GUI性能監控工具Jconsole以及JisualVM簡介

1 Jconsole

1.1 簡介以及連接

  JConsole是一個基於JMX的GUI工具,用於連接正在運行的JVM,它是Java自帶的簡單性能監控工具。下面以對tomcat的監控爲例,帶領大家熟悉Jconsole這個工具。

  Step 1,在dos/bash命令下輸入:jconsole;

  Step 2,在彈出的對話框中選中apache,並點擊connect(假設你的tomcat已經啓動);

  

  接下來,你就能使用jconsole來做一些簡單的性能監控了。

1.2 模塊介紹

1.2.1 Overview

  

  1. 概要界面,主要顯示堆內存使用情況、活動線程數、加載類數、CPU使用率四個參數的概要,可以通過下拉框來定製顯示的時間範圍;

  2. 假如堆內存的圖像一直在上升而沒有下降的動作發生,則要懷疑是否內存泄露;健壯的項目由於GC的存在,所以它的上升和下降的幅度應該大抵相同;

  3. CPU的圖像規律跟堆內存的大致相同。

1.2.2 Memory

  

  1. 圖示爲被監控程序的詳細內存圖;

  2. 關注點1:點擊右上的GC按鈕可以通知JVM進行垃圾回收,實質是把垃圾回收隊列的優先級提高;

  3. 關注點2:GC time顯示了每次回收的時間、算法以及回收數,7.619 seconds是用時,Copy表示垃圾回收機制的複製算法,MarkSweepCompact表示垃圾回收機制的標記-清除-壓縮算法,1426 collections表示回收的數量;

  4. 右下角的圖案,Heap內存區包括:年輕代Eden Space、存活代Survivor Space和老年代Tenured Gen;Non-Heap內存區包括:代碼緩存區Code Cache和持久代Perm Gen;可通過改變下拉框或者直接點擊圖形實現切換。

1.2.3 Threads

  

  1. Peak表示最大的線程數,這個數值可以通過更改<tomcat_home>/conf/server.xml下的maxThreads來更改;

  2. 點擊具體的Thread之後,我們可以看到它的方法棧的詳細調用情況;

  3. 點擊Detect Deadlock可以檢測是否有死鎖。

1.2.4 Classes

  

  關注點:類的數量變化。

1.2.5 VM Summary

  

  關注點1:上面幾欄是關於系統和項目的概要信息;

  關注點2:最下面一欄的第一項是tomcat設定的JVM參數,如果你想知道你設置的參數有沒有成功啓用,看這裏就對了。

1.2.6 MBeans

  

  關注點1:Attributes顯示該bean的詳細細節;

  

   關注點2:Operations顯示該bean的所有方法,可以點擊該按鈕觸發方法,但個人不推薦這麼做,應該通過程序的統一入口來觸發。 

2 JVisualVM

2.1 簡介以及連接

  JVisualVM是Netbeans的profile子項目,已在JDK6.0 update 7 中自帶(bin/jvisualvm.exe),能夠監控線程,內存情況,查看方法的CPU時間和內存中的對象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)。

  Step 1,假如你手頭上的Tomcat項目已經啓動,在bash/dos下輸入:jvisualvm,敲擊回車;

  Step 2,選中Tomcat,雙擊即可啓動監控,在初始頁面我們即可看到一些概要信息和JVM參數。

  

2.2 模塊介紹

2.2.1 Monitor

  

  關注點1:按鈕“Perform GC”可通知JVM將垃圾回收動作的優先級提高;

  關注點2:“Daemon”線程是指JVM的守護線程,通俗的理解爲JVM的系統進程;

  關注點3:按鈕“Heap Dump”可生成堆內存快照,下面詳細講解Heap Dump的使用。

2.2.1.1 Heap Dump

  1)Summary

  

  關注點1:紅框標註的箭頭處,可以憑你的點擊順序切換前後窗口;

  關注點2:“Inspect”檢查處可以查詢最大的對象,個數可自行定製;

  關注點3:點擊“Show Threads”可以顯示線程細節,如下所示:

  

  關注點1:timed_waiting和runnable表示線程運行狀態;

  關注點2:daemon表示這個線程是守護線程,如沒有標記daemon則表示它是一個用戶線程,如main線程;

  關注點3:prio表示該線程的優先級,在java線程中數字越大優先級越高,取值在1至10之間,默認爲5;

  關注點4:點擊被標註成藍色的相關類,可以在Instances界面查看細節;

  2)Instances

  

  關注點1:右上角的三個按鈕可以對界面進行定製;

  關注點2:點擊“Compute Retained Sizes”可計算每個field的保留尺寸,簡言之就是它所佔的byte值;

  關注點3:右下角紅框處標記出了,不同的圖形代表不同的角色;

  3)Classes

  

  關注點1:左下角可以通過filter來過濾顯示視圖;

  關注點2:右擊某個類可以讓其在Instances界面顯示,查看其細節;

  關注點3:點擊右上角紅框處可以與另一個內存快照進行比較,在比較視圖中可以看出每個類的增加和減少的情況;

  4)OQL Console

  

  關注點1:點擊Saved Queries,選中具體的Query實例,在點擊Execute就可以進行查詢了,Save按鈕可以保存你的query語句;

  關注點2:比較使用的是PermGen分析語句;

2.2.2 Threads

  

  關注點1:線程的顏色從綠、紫、黃、紅,分別代表運行、休眠、等待和死鎖;

  關注點2:Timeline以時間軸顯示線程情況,Table以表格顯示,Details以細節的圖形+表格方式顯示線程情況。當然你也可以選中單個線程來顯示,通過點擊下拉框即可實現;

  關注點3:點擊Thread Dump即可生成線程快照,其功能跟2.2.1.1 Heap Dump 1)Summary中的Show Threads類似,這裏不多加解釋。

2.2.3 Sampler

2.2.3.1 採樣器簡介

  1. 通過settings可以對CPU的採樣來源以及內存的刷新時間進行設置;

  2. 點擊CPU或者Memory即可開始監控,點擊Stop則停止採樣;

2.2.3.2 CPU

  1)CPU samples

  

  關注點1:點擊Thread Dump可生成線程快照;

  關注點2:點擊Snapshot可生成線程的快照,快照裏面包含了所有線程的調用樹以及其熱點編譯情況,如下圖所示:

  

  2)Thread CPU Time

   

  關注點:點擊Deltas按鈕後,可記錄線程的變化,功能有點類似JProfiler的“Mark Current Values”。

2.2.3.3 Memory

  1)Heap histogram

  

  關注點1:Deltas、Peform GC、Heap Dump的功能與上文類似;

  關注點2:點擊Snapshot將生成如下的內存快照,主要顯示堆內存中類的內存信息:

  

  2)PermGen histogram

  

  圖爲持久代的內存情況。

  3)Perthread allocations

  

  圖爲每個線程的內存分佈情況。

2.2.4 Profiler

2.2.4.1 CPU

  

  Profiler跟Sampler不同在於它是對程序的實時監控,而Sampler只能說是一段時間內的統計採樣。

  在CPU功能模塊我們可以看到每個熱點編譯方法的使用時間。

2.2.4.2 Thread

  

  對當前存活對象的實時監控。

3 如何開啓遠程監控

3.1 Tomcat中的參數設定

  windows系統在catalina_home/bin/setenv.bat中加入如下配置:  

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

  linux系統在catalina_home/bin/setenv.sh中加入如下配置:  

export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port='9005' -Dcom.sun.management.jmxremote.authenticate='false' -Dcom.sun.management.jmxremote.ssl='false'"

  1)‘-Dcom.sun.management.jmxremote’表示啓用Java Management Extensions(Java管理擴展)技術,簡稱JMX。JMX在Java編程語言中定義了應用程序以及網絡管理和監控的體系結構、設計模式、應用程序接口以及服務。通常使用JMX來監控系統的運行狀態或管理系統的某些方面,比如清空緩存、重新加載配置文件等。

  2)‘9004’表示這個JMX服務的端口號;

  3)‘authenticate’表示false時無需帳號密碼驗證,如改爲true(啓用帳號密碼驗證),需增加以下配置:

    >  在JRE_HOME/lib/management下將'jmxremote.password.template'文件複製多一份,比如複製爲'jmxremote.password',將這個複製出來的新文件底部的monitorRole和controlRole前面的註釋去掉;

    >  monitorRole的值表示讀取的密碼,controlRole表示讀取和寫入的密碼,請將二者的值更改爲你想要的密碼;

    >  修改setenv.sh配置(windows請修改.bat)如下:

    export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port='9005' -Dcom.sun.management.jmxremote.password.file=pwdFilePath -Dcom.sun.management.jmxremote.ssl='false'"

    >  ‘Set file permissions so that only you can read and write the password file’,這個複製出來的密碼文件需設置成只有屬主具備讀寫權限,否則tomcat將無法正常啓動;

  4)-Dcom.sun.management.jmxremote.ssl='false'

3.2 Jconsole的配置

3.3 Jvisulvm的配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章