天天看點

JConsole工具使用一、介紹二、遠端監控三、使用簡介

轉自:https://www.cnblogs.com/baihuitestsoftware/articles/6405580.html#top

Jconsole,Java Monitoring and Management Console。

Jconsole是JDK自帶的監控工具,在JDK/bin目錄下可以找到。它用于連接配接正在運作的本地或者遠端的JVM,對運作在java應用程式的資源消耗和性能進行監控,并畫出大量的圖表,提供強大的可視化界面。而且本身占用的伺服器記憶體很小,甚至可以說幾乎不消耗。

一、介紹

JConsole 是一個内置 Java 性能分析器,可以從指令行(直接輸入jconsole)或在 GUI shell (jdk\bin下打開)中運作。

它用于對JVM中記憶體,線程和類等的監控。可使用JTop插件。它可以監控本地的jvm,也可以監控遠端的jvm,也可以同時監控幾個jvm。 

這款工具的好處在于,占用系統資源少,而且結合Jstat,可以有效監控到java記憶體的變動情況,以及引起變動的原因。在項目追蹤記憶體洩露問題時,很實用。 

使用 JConsole 進行工作

分析器有自己的開銷,是以最好的辦法就是花點時間來弄清是什麼開銷。發現 JConsole 開銷最簡單的辦法是,首先獨自運作一個應用程式,然後在分析器下運作,并測量差異。(應用程式不能太大或者太小;我最喜歡使用 JDK 附帶的 SwingSet2 樣本。)是以,我使用 

-verbose:gc

 嘗試運作 SwingSet2 來檢視垃圾收集清理,然後運作同一個應用程式并将 JConsole 分析器連接配接到它。當 JConsole 連接配接好了之後,一個穩定的 GC 清理流出現,否則不會出現。這就是分析器的性能開銷。

二、遠端監控

因為 Web 應用程式分析工具假設通過一個套接字進行連通性分析,隻需要進行少許配置來設定 JConsole(或者是基于 JVMTI 的分析器,就這點而言),監控/分析遠端運作的應用程式。

遠端監控與本地監控配置類似,這裡以監控遠端為例。

1、監控tomcat 

伺服器端:

詳細步驟如下所示:

1、  vi catalina.sh
找到# OS specific support. $var _must_ be set to either true or false.添加如下變量: 

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=192.168.56.253
-Dcom.sun.management.jmxremote.acccess.file=/usr/local/tomcat/bin/jconsole/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=/usr/local/tomcat/bin/jconsole/jmxremote.password"



 
2、  切換使用者到root,修改/etc/hosts添加IP位址。
添加如下資訊: 增加192.168.56.253 localhost
 
Hostname -i
3、編輯jmxremote.access和jmxremote.password
這兩個檔案是在JDK裡面的,可以通過%JAVA_HOME%/jre/lib/management目錄找到。裡面有個jmxremote.password.template檔案,将其重命名為jmxremote.password,這就是控制遠端連接配接的使用者名密碼的。
 
find . -name "jmxremote.password.template" -print ./usr/lib/jvm/java/jre/lib/management/jmxremote.password.template
$JAVA_HOME=/usr/lib/jvm/java/
 
#mkdir -p $JAVA_HOME/jconsole #cp $JAVA_HOME/jre/lib/management/jmxremote.password.template $JAVA_HOME/jconsole/jmxremote.password #cp $JAVA_HOME/jre/lib/management/jmxremote.access $JAVA_HOME/jconsole/jmxremote.access修改檔案權限: #chmod -R 600 jconsole 
此時提示錯誤: 必須限制密碼檔案讀取通路: $JAVA_HOME/jconsole/jmxremote.password。 解決辦法:在$CATALINA_BASE(/tomcat/bin/)目錄下建立jconsole檔案夾,通路檔案權限必須是600 #mkdir -p $CATALINA_BASE/jconsole 複制jmxremote.password、jmxremote.access到$CATALINA_BASE/jconsole,修改檔案權限 #chmod -R 600 jmxremote.password #chmod -R 600 jmxremote.access 
然後chmod對這兩個檔案賦權,600就可以了。
最後vi jmxremote.password,修改下面兩行,把注釋#去掉:
# monitorRole  XXXXXX# controlRole  XXXXXX
 
 monitorRole  QED
 controlRole   R&D
 
4、  編輯 /etc/sysconfig/ iptables.old
增加一行:
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 9999 -j ACCEPT
COMMIT
 
檢視端口是否被使用:netstat -apn|grep 9999
 
5、$CATALINA_BASE/bin/shutdown.sh.出現連接配接端口被占用提示。 ps -ef | grep 1090 --被占用端口 kill -9 pid 重新開機Tomcat.$CATALINA_BASE/bin/startup.sh jconsole 遠端連接配接(使用192.168.56.253:9999   controlRole R&D連接配接)
           

修改catalina.sh時,也可以将其設定為無密碼通路,如:

CATALINA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.116.111 
-Dcom.sun.management.jmxremote.port=9527 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false"      

用戶端:

已成功安裝jdk1.5以上版本。在指令行下啟動jconsole,選擇遠端程序,輸入ip:port,使用者名與密碼,即可監控tomcat的jvm。

JConsole工具使用一、介紹二、遠端監控三、使用簡介

2、可能無法連接配接原因

從windows連接配接到linux時(centos5.4)時,老是連接配接不上)。原因是Linux上JVM給jconsole的RMI配置檔案不對,
jvm使用了hostname -i的IP位址,我的/etc/hosts上127.0.0.1,是以遠端老是連接配接不上。
隻要在java啟動參數中加入 -Djava.rmi.server.hostname=192.168.0.10  顯示說明JVM傳回給jconsole的IP位址即可。

JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote.port=1011 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.210"      

2、監控was

http://xjsunjie.blog.51cto.com/999372/1331880

三、使用簡介

當Jconsole連接配接成功後,它從JMX擷取資訊,我們便可以在裡面監控具體的内容。

Jconsole能捕獲到以下資訊:

  1. 概述 - JVM概述和一些監控變量的資訊
  2. 記憶體 - 記憶體的使用資訊
  3. 線程 - 線程的使用資訊
  4. 類 - 加載java類的資訊
  5. VM - JVM摘要
  6. MBeans - 所有MBeans的資訊

性能測試過程中需要關注哪些資訊呢?一般主要關注記憶體欄、線程欄、類欄,概述欄和VM欄次之,MBeans欄在追蹤具體問題時用到。

随時可以使用JConsole的在右上角的綠色連接配接狀态圖示,斷開或重新連接配接到正在運作的Java虛拟機。 從下拉菜單中選擇連接配接,然後建立連接配接,您可以同時連接配接到任何數量運作中的Java虛拟機。

以下以本地監控jconsole程序為例講解。

1、 檢視概述資訊

概述頁籤中顯示CPU使用率,記憶體使用率,線程數,Java VM中加載的類的監控資訊。

圖3-1概述“頁籤

JConsole工具使用一、介紹二、遠端監控三、使用簡介

“概述”頁籤提供了一種簡單的方法相關的資訊,以前隻能通過多個頁籤之間切換。

儲存圖表資料

JConsole的,可以讓您儲存在一個逗号分隔值(CSV)檔案中的圖表提供的資料。 為了節省從圖表中的資料,隻需右鍵單擊任何圖表上, 選擇儲存資料,然後指定其中的資料将被儲存的檔案。 從任何任何JConsole的不同的标簽以這種方式顯示的圖表,您可以儲存資料。

CSV格式是常用的電子表格應用程式之間的資料交換。 CSV檔案可以導入到電子表格應用程式,可以用來建立這些應用程式的圖表。 這些資料是兩個或多個命名的列,第一清單示的時間戳。 導入電子表格應用程式的檔案後,你通常需要選擇的第一列,并改變其格式為“日期”或“日期/時間”。

2、監控記憶體消耗

Memory頁籤提供了記憶體消耗和記憶體池的資訊。

圖3-2記憶體“頁籤

JConsole工具使用一、介紹二、遠端監控三、使用簡介

圖3-3記憶體“頁籤

JConsole工具使用一、介紹二、遠端監控三、使用簡介

圖3-2,3-3顯示都沒有問題,隻是監控的程序不同而有所差別。非堆記憶體顯示區域不同。

記憶體标簽功能“執行GC”的按鈕,可以單擊執行垃圾收集。 圖表動态顯示記憶體使用的堆和非堆記憶體的記憶體池。 可用的記憶體池取決于正在使用的版本的Java VM。 串行垃圾回收的記憶體池的HotSpot Java虛拟機,有以下幾種。

  • 伊甸園空間(堆):大多數對象最初配置設定記憶體的池。
  • 生存空間(堆):包含伊甸園空間垃圾收集後生存的對象。
  • 年老代(堆):池包含已經存在一段時間的對象。
  • 永久代(非堆):池包含的所有虛拟機本身的反射的資料,如類和方法的對象。 Java虛拟機,使用類資料共享,這一代分為隻讀和讀寫區域。
  • 代碼緩存(非堆):HotSpot Java虛拟機的還包括一個代碼緩存,包含記憶體,使用本機代碼的編譯和存儲。

可以從圖表下拉菜單中的選項選擇不同的圖表顯示圖表這些記憶體池的消費。 此外,點選在右下角的角落堆和非堆圖示,将切換顯示圖表(與下拉框選擇不同類型圖表功能相同)。 最後,可以指定跟蹤記憶體使用情況,從時間範圍内的下拉菜單中的選項選擇的時間範圍。

欲了解更多有關這些記憶體池的資訊,請參閱下面的垃圾收集。

“詳細資訊”區域顯示了目前記憶體資訊:

  • 已使用:目前使用的記憶體量,包括所有對象,可達和不可達占用的記憶體。
  • 配置設定 :保證由Java虛拟機使用的記憶體量。 送出的記憶體量可能會随時間而改變。 Java虛拟機可能會釋放系統記憶體,并已送出的記憶體量可能會少于最初啟動時配置設定的記憶體量。 送出的記憶體量将始終大于或等于使用的記憶體量。
  • 最大值,可用于記憶體管理的最大記憶體量。 它的價值可能會發生變化,或者是不确定的。 如果Java虛拟機試圖增加使用的記憶體要大于送出的記憶體,記憶體配置設定可能失敗,即使使用量小于或等于最大值(例如,當系統上的虛拟記憶體不足)。
  • GC時間 :累計時間花在垃圾收集和調用的總數。 它可能有多個行,其中每一個代表一個垃圾收集器算法在Java虛拟機使用時間。

    MarkSweepCompact:年輕代GC

    Scavenge:full GC

GC時會暫停整個JAVA應用,普通GC 隻是對年輕代進行垃圾回收,full的GC會對整個堆記憶體(包含老年代、年輕代)進行垃圾回收。system的GC顯示調用GC。

full gc 隻會在兩個情況下發生:1)system.gc被顯示調用時,會執行full gc。2)老年代的堆記憶體滿時,會執行full gc。

較低的右側的條形圖顯示堆和非堆記憶體中的記憶體池消耗的記憶體。 列會變成紅色時,使​​用的記憶體超過了記憶體使用閥值。

堆和非堆記憶體

Java虛拟機管理兩種記憶體:堆和非堆記憶體,這兩者都是Java虛拟機啟動時建立的。

  • 堆記憶體是運作時資料區域,Java VM的所有類執行個體和數組配置設定記憶體。 可能是固定或可變大小的堆。
  • 非堆記憶體包括在所有線程和Java虛拟機内部處理或優化所需的共享的方法。 它存儲了類的結構,運作常量池,字段和方法資料,以及方法和構造函數的代碼,方法區在邏輯上是堆的一部分,看具體實作的方式。根據實作方式的不同,Java虛拟機可能不進行垃圾收集或壓縮。 堆記憶體一樣,方法區域可能是一個固定或可變大小。 方法區的記憶體不需要是連續的。

除了方法區,Java虛拟機可能需要進行内部處理或優化,這也屬于非堆記憶體的記憶體。 例如,實時(JIT)編譯器需要記憶體用于存儲從Java虛拟機的高性能的代碼翻譯的機器碼。

記憶體池和記憶體管理器

記憶體池和記憶體管理器是Java虛拟機的記憶體系統的關鍵環節。

  • 一個記憶體池表示Java虛拟機管理的記憶體區域。 Java虛拟機至少有一個記憶體池,它可能在執行過程中建立或删除記憶體池。 一個記憶體池可以屬于堆或以非堆記憶體。
  • 一個記憶體管理器管理一個或多個記憶體池。 垃圾收集器是一個負責回收不可達的對象使用的記憶體的記憶體管理器。 Java虛拟機可能有一個或更多的記憶體管理器。 在執行過程中,它可以添加或删除記憶體管理器。 一個記憶體池可以由一個以上的記憶體管理器進行管理。

垃圾收集

垃圾收集(GC)是Java虛拟機如何釋放不再被引用的對象所占用的記憶體。 它通常認為的對象,有作為“活着”和非引用作為或不可達對象的活動引用“死。” 垃圾收集是由死對象占用的的記憶體釋放過程。 氣相色譜法的算法和使用的參數可以對性能有巨大影響。

Java HotSpot虛拟機的垃圾收集器使用代GC。 代GC的優勢,大多數都符合以下的概括。

  • 他們建立有許多短暫的一生對象,例如,疊代和局部變量。
  • 他們建立一些對象,有很長的生活,例如,高層次的持久對象。

代GC分為幾代,并給每個指定一個或多個記憶體池。 當一代使用了配置設定的記憶體,虛拟機上執行一個局部的GC(也叫minor collection),記憶體池回收死對象使用的記憶體。 這部分的GC速度通常遠遠優于一個完整的GC。

Java HotSpot虛拟機定義了兩代:年輕代(有時也被稱為“事先串通的人所”)和年老代。 年輕代包括“伊甸園空間”和兩個“生存空間”。 最初,VM将所有的對象在“伊甸園”空間,大多數對象死在那裡。 當它執行了一次minor GC,VM将剩餘的對象從“伊甸園空間”轉移到“生存空間”。 虛拟機将足夠長生存時間的對象移動到年老代的空間。 當年老代填滿了,将是一個完整的GC,往往是慢得多,因為它涉及到所有存活的對象。 永久代包含所有的虛拟機本身的反射,如類和方法的對象的資料。

預設情況下代安排看起來像圖3-4。

圖3-4代的資料,在垃圾收集

如果垃圾收集器已經成為一個瓶頸,你可以通過自定義代大小來提高性能。 使用JConsole,你可以調查你的性能名額的敏感性實驗與垃圾收集器的參數。 欲了解更多資訊,請參閱調整與5.0 HotSpot虛拟機的垃圾收集,http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html。

3、監視線程使用

線程“頁籤上提供了有關線程使用的資訊。

圖3-5 Threads頁籤

在左下角的“線程”清單列出了所有的活動線程。 如果你輸入一個“過濾器”字段中的字元串,線程清單将隻顯示其名稱中包含你輸入字元串線程。 點選一個線程線上程清單的名稱,顯示該線程的資訊的權利,包括線程的名稱,狀态、阻塞和等待的次數、堆棧跟蹤。

圖表顯示活動線程的數量随着時間的推移。 兩行顯示。

  • 紅色 :峰值線程數
  • 藍 :活動線程數。

線程頁籤提供了幾個有用的操作。

  • findMonitorDeadlockedThreads:檢測,如果任何線程對象螢幕鎖定陷入死鎖。 此操作傳回一個死鎖的線程ID數組。
  • getThreadInfo:傳回線程的資訊。 這包括名稱,堆棧跟蹤和監測鎖,該線程目前已封鎖,如果有的話,哪個線程持有該鎖,以及線程争用統計。
  • getThreadCpuTime:傳回給定的線程所消耗的CPU時間

通過MBeans頁籤,您可以通過選擇的MBean樹中的線程MXBean的這些附加功能。 這MXBean的通路被監視的Java虛拟機線程資訊列出所有的屬性和操作。 請參閱監視和管理的 MBean 。

檢測死鎖線程

要檢查如果您的應用程式已經陷入了僵局運作(例如,您的應用程式似乎是挂了),死鎖的線程可以通過點選“檢測死鎖”按鈕檢測。 如果檢測到任何死鎖的線程,這些都顯示在一個新的标簽,旁邊出現的“主題”标簽, 在圖 3-6所示。

圖3-6僵持主題

檢測死鎖“按鈕,将涉及對象螢幕和 java.util.concurrent的可擁有同步器(見API 規範文檔java.lang.management.LockInfo)檢測死鎖循環。 Java SE 6中已加入的java.util.concurrent鎖的監控支援。 如果JConsole的連接配接到一個J2SE 5.0 VM,檢測死鎖機制隻會找到相關的對象螢幕死鎖。 jconsole會不顯示任何相關的可擁有同步器的死鎖。

關于線程和守護線程的詳細資訊, 請參見API文檔的java.lang.Thread。

4、監視類載入中

“類”标簽顯示關于類加載的資訊。

圖3-7類标簽

圖表曲線加載的類的數量随着時間的推移。

  • 紅線總數(包括後來解除安裝的)加載的類。
  • 藍線是目前的類加載。

在頁籤底部的詳細資訊部分顯示類的加載,因為Java虛拟機開始的總數,目前加載和解除安裝的數量。 跟蹤類加載詳細的輸出,您可以勾選在頂部的右上角複選框。

檢視VM資訊

VM摘要“頁籤提供了對Java虛拟機的資訊。

圖3-8虛拟機摘要頁籤

在此頁籤中提供的資訊包括以下内容。

  • 摘要
    • 運作時間 :開始以來,Java虛拟機的時間總額。
    • 程序的CPU時間 :Java VM的開始,因為它消耗的CPU時間總量。
    • 編譯總時間 :累計時間花費在JIT編譯。
  • 主題
    • 活動線程 :目前現場守護線程,加上非守護線程數量。
    • 峰值 :活動線程的最高數目,因為Java虛拟機開始。
    • 守護線程 :目前的活動守護線程數量。
    • 總線程 :開始自Java虛拟機啟動的線程總數,包括非守護程序,守護程序和終止的線程。
    • 目前類裝載 :目前加載到記憶體中的類數目。
    • 總類加載 :從Java VM開始加載到記憶體中的類總和,包括那些後來被解除安裝的類。
    • 已解除安裝類總數 :從Java虛拟機開始從記憶體中解除安裝的類的數目。
  • 記憶體
    • 目前的堆大小 :目前所占用的堆的千位元組數。
    • 配置設定的記憶體 :堆配置設定的記憶體總量。
    • 最大堆最大值 :堆所占用的千位元組的最大數目。
    • 待最後确定的對象:待最後确定的對象的數量。
    • 花在執行GC的垃圾收集器 :包括垃圾收集,垃圾收集器的名稱,進行藏品的數量和總時間的資訊。
  • 作業系統
    • 總實體記憶體
    • 空閑實體記憶體
    • 配置設定的虛拟記憶體
  • 其他資訊
    • VM參數 :輸入參數的應用程式通過Java虛拟機,不包括的主要方法的參數。
    • 類路徑是由系統類加載器用于搜尋類檔案的類路徑。
    • 庫路徑 :加載庫時要搜尋的路徑清單。
    • 引導類路徑 :引導類路徑是由引導類加載器用于搜尋類檔案。

5、監控和​​管理的MBean

MBeans頁籤顯示的資訊平台MBean伺服器中的一個通用的方法對所有已注冊的MBean。 MBeans頁籤允許您通路平台MXBean。 此外,您還可以監控和管理您的應用程式的MBean。

圖3-9 MBeans頁籤

左側的樹顯示目前正在運作的所有MBean。 當您選擇樹中的一個MBean, 其 MBeanInfo及其MBean描述符都顯示在右側,并在它下面的樹中出現的任何屬性,操作或通知。

所有平台MXBean和各種操作和屬性是通過JConsole的MBeans頁籤通路。

建構MBean的樹

預設情況下,基于對象的名稱樹中示MBean。jconsole會使用确切的鍵屬性清單建構MBean樹,建構時調用ObjectName.getKeyPropertyListString()方法傳回類型的第一個key,和j2eeType的第二個key,如果存在的話。

然而,依靠ObjectName的關鍵屬性的預設順序,有時可以導緻意外的結果。例如,如果兩個對象的名字也有類似的key,但其key的排序不同,那麼相應的MBean将不會在MBean樹相同的節點下建立。

例如,假設您建立具有下列名稱的三角MBean的對象。

com.sun.example:type=Triangle,side=isosceles,name=1
com.sun.example:type=Triangle,name=2,side=isosceles
com.sun.example:type=Triangle,side=isosceles,name=3      

至于JMX技術而言,這些對象将被視為在完全一樣的方式。在對象名稱的鍵的順序不作任何JMX技術的差異。但是,如果JConsole連接配接這些MBean,并使用預設的MBean樹渲染,那麼對象com.sun.example:type=Triangle,name=2,side=isosceles最終會被節點Triangle下建立,在一個節點2,将包含一個子節點稱為isosceles。其他兩個isosceles,name= 1 name= 3,将分設在不同的節點isosceles下,如圖3-10所示。

圖3-10意外的MBean樹渲染範例

您可以指定MBean提供一個有序的鍵屬性清單來避免這個問題。當你在指令行啟動JConsole時,通過設定系統屬性com.sun.tools.jconsole.mbeans.keyPropertyList:

% jconsole -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=key[,key]*      

鍵屬性清單需要一個逗号分隔,在您所選擇的, key的地方必須是一個字元串,代表一個對象的名稱鍵或一個空字元串的順序。 如果在清單中指定的一個key并不适用于一個特定的MBean,那麼該key将被丢棄。bjectName.getKeyPropertyListString()傳回值定義的鍵的順序,将用于完成 keyPropertyList定義的鍵順序。 是以,指定一個空的鍵清單僅僅意味着jconsole會顯示MBean的ObjectName的鍵。

是以,傳回到上面提到的例子,你可以選擇指定的keyPropertyList系統屬性啟動JConsole:

% jconsole -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=side,name      

JConsole中會産生的MBean樹如圖 3-11所示。

圖3-11範例的MBean樹構造使用keyPropertyList

在圖3-10中,side第一,name第二。 因為type不是在指定的鍵屬性清單類型的key,是以MBean樹算按預設次序排序。

根據公約所定義的JMX最佳實踐準則的對象的名稱, 類型的關鍵應該永遠是第一位的。 是以,要尊重本公約應從以下系統屬性JConsole的。

%JConsole的- J - Dcom.sun.tools.jconsole.mbeans.keyPropertyList =type,side,name      

上面的指令将導緻JConsole的渲染如圖3-12中所示

圖3-12範例的MBean樹尊重JMX的最佳實踐建構

這顯然遠遠超過難了解的圖3-10和圖3-11中顯示的MBean的樹。

MBean屬性

選擇“屬性”節點顯示一個MBean的所有屬性,圖3-13顯示了Threading的所有屬性。

圖3-13檢視所有的MBean屬性

選擇單個MBean屬性, 其 MBeanAttributeInfo,會顯示在右窗格中,如圖3-14。

圖3-14檢視單個的MBean屬性

您可以通過輕按兩下右側窗體中粗體文本顯示更多資訊。 例如,如果你點選HeapMemoryUsage 對應的value值,你會看到一個圖表:圖3-15 。

圖3-15顯示的屬性值

輕按兩下數字屬性值将顯示一個圖表,圖,數值的變化。 例如,輕按兩下上的垃圾收集器的MBean 的PS Marksweep CollectionTime屬性,将顯示執行垃圾收集所花費的時間。

您還可以使用JConsole設定可寫屬性的值。 一個可寫的屬性的值顯示為藍色。 在這裡你可以看到記憶體的MBean的詳細屬性。

圖3-16設定可寫的屬性值

您可以通過點選,然後編輯它們的屬性。 例如,啟用或禁用在JConsole詳細的垃圾收集器跟蹤,選擇在MBeans頁籤的MXBean 和詳細的屬性設定為真或假。 同樣,類加載的MXBean也有詳細的屬性,可以設定啟用或禁用類加載的詳細跟蹤。

MBean操作

選擇“操作”節點顯示一個MBean的所有操作。你可以通過按鈕去調用方法. 圖3-20 所有線程的方法。

Figure 3-17 Viewing All MBean Operations

選擇一個MBean樹中選擇一個方法,可以看到該方法的描述資訊,如圖 3-18 .

Figure 3-18Viewing Individual MBean Operations

MBean通知

在左邊的樹中選擇訂閱,并點選訂閱按鈕。右側将顯示收到的通知。如圖3-19。

Figure 3-19 Viewing MBean Notifications

選擇單個MBean通知,MBeanNotificationInfo會顯示在右窗格中,如圖3-20所示。

Figure 3-20 Viewing Individual MBean Notifications

HotSpot的診斷的MXBean

JConsole的MBeans頁籤還允許你告訴HotSpot虛拟機執行堆轉儲,并通過HotSpotDiagnostic MXBean的VM選項,以擷取或設定。

Figure 3-21 Viewing the HotSpot Diagnostic MBean

Figure 3-22 Viewing the HotSpot Diagnostic MBean

JConsole工具使用一、介紹二、遠端監控三、使用簡介

您可以手動執行堆轉儲調用com.sun.management.HotSpotDiagnostic MXBean的dumpheap指令操作。此外,您可以指定HeapDumpOnOutOfMemoryError Java VM選項,使用setVMOption操作,是以,VM執行堆轉儲時自動收到一個OutOfMemoryError。

建立自定義頁籤

除了現有的标準頁籤,你可以添加自己的自定義頁籤JConsole的,執行自己的監視活動。 JConsole的插件API提供了一種機制,例如,通過它可以添加标簽來通路自己的應用程式的MBean。 JConsole這樣的插件API定義com.sun.tools.jconsole.JConsolePlugin抽象類,你可以擴充到建立您的自定義插件。

如上所述,您的插件必須繼承JConsolePlugin,并實作JConsolePlugin getTabs和newSwingWorker方法。 getTabs方法傳回的頁籤的清單被添加到JConsole的,或者一個空清單。 newSwingWorker方法傳回SwingWorker的負責插件的GUI更新。

您的插件必須提供一個Java歸檔(JAR)的檔案,該檔案包含一個名為META-INF/services/com.sun.tools.jconsole.JConsolePlugin檔案。這個JConsolePlugin檔案本身包含的所有插件完全合格的類名要添加新JConsole的标簽清單。 JConsole中使用的服務提供商的裝卸設施,來查找并加載插件。你可以有多個插件。

要加載到JConsole的新的自定義插件,啟動JConsole的用下面的指令:

%  jconsole -pluginpath plugin-path      

在上面的指令,插件路徑指定要查找的JConsole插件的路徑。這些路徑可以是目錄名或JAR檔案,并可以指定多個路徑,用你的平台的标準分隔符字元。

一個例子JConsole的插件提供了Java SE 6平台。 JTop應用程式是JDK的示範,展示了在應用程式中運作的所有線程的CPU使用率。這個示範是有用的識别,具有較高的CPU消耗的線程,它已被更新作為一個JConsole的插件以及一個獨立的GUI使用。 JTop是捆綁在一起的Java SE 6平台,作為一個示範應用程式。您可以運作的JTop插件JConsole中運作以下指令:

%JDK_HOME/bin/jconsole -pluginpath JDK_HOME/demo/management/JTop/JTop.jar      

如果您連接配接到這種JConsole的執行個體,你會看到,JTop标簽已被添加,顯示運作各個線程的CPU使用率。

Figure 3-25 Viewing a Custom Plug-in Tab

參考:

1、http://www.ibm.com/developerworks/cn/java/j-5things7.html?ca=drs-

2、http://zhumeng8337797.blog.163.com/blog/static/1007689142012424114643418/

3、jconsole使用參考:http://hornetblog.sinaapp.com/?p=5

http://www.open-open.com/lib/view/open1345646982251.html