JConsole的圖形用戶界面是一個符合Java管理擴展(JMX)規範的監測工具。 JConsole使用Java虛擬機(Java VM),提供在Java平台上運行的應用程序的性能和資源消耗的信息。
在Java平台,標準版(Java SE平台)6,JConsole的已經更新到目前的外觀和感覺的Windows和GNOME桌面(其他平台,將目前標準的Java圖形的外觀和感覺)。 在這個文件中提出的屏幕截圖是從Windows XP上運行的接口的一個實例。
啟動JConsole
JConsole是可執行文件, 在JDK_HOME/bin目錄中,其中JDK_HOME是在Java開發工具包(JDK)的安裝目錄。 如果此目錄是在您的系統路徑,你可以開始只需鍵入命令jconsole。 否則,您必須鍵入可執行文件的完整路徑。
命令語法
您可以使用JConsole來監視本地應用程序以及遠程應用程序。
註:使用JConsole監視本地應用程序在開發和創建原型是非常有用的,但不推薦用於生產環境,因為jconsole本身也消耗大量的系統資源。 遠程監控建議隔離被監視機器。
jconsole命令的語法完整的參考,請參閱 JConsole的命令手冊頁:Java監視和管理控制台。
設置本地監控
在命令行中鍵入以下命令啟動JConsole的。
JConsole
當JConsole的啟動時,您將獲得一個本地運行JConsole的可以連接到的所有的Java應用程序的選擇。
如果您要監控的特定應用程序,你知道該應用程序的進程ID,那麼你也可以啟動JConsole連接到該應用程序。 此應用程序必須和JConsole運行在相同的用戶ID下。 該命令的語法以下。
%JConsole中 processID
以上的processID是應用程序的進程ID(PID)。 您可以用以下方式確定一個應用程序的PID:
- 在UNIX或Linux系統,可以使用ps命令找到正在運行的Java實例的PID 。
- 在Windows系統上,您可以使用任務管理器,找到 java 或者 javaw進程的PID。
- 您還可以使用jps命令行實用程序來確定的PID。 見的手冊頁的Java虛擬機進程狀態工具。
例如,如果你確定, 記事本應用程序的進程ID是2956,那麼你可以用下面的命令啟動JConsole。
JConsole 2956
jconsole和被監視的應用程序必須運行在相同的用戶下, 擁有管理和監控系統使用的操作系統的文件權限。 如果你不指定一個進程ID,jconsole會自動檢測所有本地Java應用程序,並顯示一個對話框,讓你選擇一個(參閱連接到 JMX代理)。
欲了解更多信息,請參閱本地監控和管理 。
設置遠程監控
要啟動遠程監控JConsole的,您可以使用下面的命令語法。
JConsole 主機名: portNum
主機名是需要監聽的主機,portNum是你啟動Java虛擬機時指定的JMX代理的端口號。 欲了解更多信息,請參閱遠程監控和管理 。
如果你不指定一個主機名/端口號的組合,那麼jconsole會顯示一個連接對話框( 連接到JMX代理 ),讓你輸入一個主機名和端口號。
建立安全的遠程監控
您也可以使用安全套接字層(SSL)進行安全的連接。 命令啟動JConsole的安全連接是在第2章,監控和管理使用JMX技術 啟用SSL JConsole的遠程監控 。
連接到一個JMX代理
如果您啟動jconsole的時候指定的JMX代理連接到的參數,它會自動開始監視指定的Java VM。 您可以連接到不同的主機在任何時候通過選擇連接|新連接,並輸入必要的信息。
否則,如果你不提供任何參數,當您啟動JConsole的,第一眼看到的是連接對話框。 此對話框有兩個選項,允許連接到本地或遠程進程。
動態連接
在以前的版本的Java SE平台,應用程序,你想監測與JConsole的需要與下面的選項開始。
%,Dcom.sun.management.jmxremote
然而,與Java SE 6平台提供的JConsole的版本,可以連接到任何應用程序,支持附加的API。 換句話說,任何在Java SE 6 HotSpot虛擬機啟動的應用程序由JConsole自動檢測,並不需要使用上述的命令行選項開始。
JConsole的連接到一個本地進程
如果你不提供連接到一個特定的JMX代理啟動JConsole的,你會看到下面的對話框窗口。
圖3-1創建一個連接到一個本地進程

本地進程選項列出所有運行在本地系統上且和JConsole程序相同的用戶ID的Java SE6 應用,包括進程ID和他們的類或參數信息。選擇您要監視的應用程序,然後單擊「連接」按鈕。 本地進程的名單中包括以下類型的Java虛擬機的運行的應用程序。
- 啟用管理代理的應用,包括Java SE 6平台或指定或sun.management.jmxremote.port選項開始的J2SE 5.0平台上的應用。 此外,名單中還包括任何應用程序,Java SE 6平台上開始沒有任何管理屬性,但以後JConsole的重視,這使得在運行時管理代理。
- 禁用管理代理,可連接的應用,應用程序在運行時禁用加載管理代。Java SE 6平台上開始支持附加的API的應用程序, 支持動態的應用程序連接,啟動管理代理可以不通過在命令行中指定的sun.management.jmxremote 或com.sun.management.jmxremote.port選項。 如果選擇此類應用程序連,將啟用該應用的管理代理。 在連接的例子所示的對話框圖 3-1中,NetBeans IDE和jconsole本身也均開始在Java SE 6平台的虛擬機。 同時出現在正常的文本,這意味着,JConsole的可以連接到它們。 在圖3-1中,JConsole是選定的,值得注意的是可見的。
- 禁用應用程序,不扣押,管理代理。這些措施包括開始的J2SE 1.4.2平台上的應用,或J2SE 5.0平台上開始沒有sun.management.jmxremote 或com.sun.management.jmxremote.port選項。 這些應用程序的顯示錶中顯示為灰色和JConsole中無法連接到他們。 字謎應用程序在連接的例子所示的對話框圖 3-1,沒有任何的管理屬性與J2SE 5.0平台的虛擬機開始啟用JMX代理,並因此顯示為灰色,無法選擇。
圖3-2沒有管理代理嘗試連接到應用程序啟用

JConsole的連接到遠程進程
當打開連接對話框,你也可以連接到遠程進程。
圖3-3創建一個連接到遠程進程

要監控遠程Java虛擬機上運行的過程中,你必須提供下列資料。
- 主機名:Java虛擬機正在運行的機器上的名稱。
- 端口號:當你啟動Java虛擬機指定JMX代理端口號碼。
- 用戶名和密碼:用戶名和密碼才能使用(需要監測只有通過JMX代理,需要密碼驗證的Java虛擬機)。
有關設置JMX代理的端口號的信息 ,請參閱啟用遠程管理。 有關用戶名和密碼的信息,請參閱使用密碼和訪問文件。
使用JMX服務URL連接
您還可以使用遠程進程選項指定他們的JMX服務URL連接其他JMX代理,用戶名和密碼。 一個JMX服務URL的語法要求您提供用於進行連接的傳輸協議,以及服務接入點。
圖3-4連接到一個JMX代理使用的JMX服務URL

如果JMX代理使用一個不包含在Java平台上的連接器,你需要添加連接器類到類路徑中,如下所示。
%JConsole- J – Djava.class.path = JAVA_HOME / lib中/ jconsole.jar:JAVA_HOME / lib / tools.jar中
介紹JConsole的標籤
一旦你連接到一個應用程序,JConsole界面由六個標籤組成。
- 概述:顯示有關Java VM和監視值的概述信息。
- 內存:顯示內存使用信息。
- 線程:顯示線程使用的信息。
- 類:顯示關於類加載的信息。
- 虛擬機:顯示有關Java VM的信息。
- MBean:顯示MBean信息。
隨時可以使用JConsole的在右上角的綠色連接狀態圖標,斷開或重新連接到正在運行的Java虛擬機。 從下拉菜單中選擇連接,然後新建連接,您可以同時連接到任何數量運行中的Java虛擬機。
查看概述信息
概述選項卡中顯示CPU使用率,內存使用率,線程數,Java VM中加載的類的監控信息。
圖3-5概述「選項卡

「概述」選項卡提供了一種簡單的方法相關的信息,以前只能通過多個選項卡之間切換。
保存圖表數據
JConsole的,可以讓您保存在一個逗號分隔值(CSV)文件中的圖表提供的數據。 為了節省從圖表中的數據,只需右鍵單擊任何圖表上, 選擇保存數據,然後指定其中的數據將被保存的文件。 從任何任何JConsole的不同的標籤以這種方式顯示的圖表,您可以保存數據。
CSV格式是常用的電子表格應用程序之間的數據交換。 CSV文件可以導入到電子表格應用程序,可以用來創建這些應用程序的圖表。 這些數據是兩個或多個命名的列,第一列表示的時間戳。 導入電子表格應用程序的文件後,你通常需要選擇的第一列,並改變其格式為「日期」或「日期/時間」。
監控內存消耗
Memory選項卡提供了內存消耗和內存池的信息。
圖3-6內存「選項卡

內存標籤功能「執行GC」的按鈕,可以單擊執行垃圾收集。 圖表動態顯示內存使用的堆和非堆內存的內存池。 可用的內存池取決於正在使用的版本的Java VM。 串行垃圾回收的內存池的HotSpot Java虛擬機,有以下幾種。
- 伊甸園空間(堆):大多數對象最初分配內存的池。
- 生存空間(堆): 包含伊甸園空間垃圾收集後生存的對象。
- 年老代(堆): 池包含已經存在一段時間的對象。
- 永久代(非堆):池包含的所有虛擬機本身的反射的數據,如類和方法的對象。 Java虛擬機,使用類數據共享,這一代分為只讀和讀寫區域。
- 代碼緩存(非堆):HotSpotJava虛擬機的還包括一個代碼緩存,包含內存,使用本機代碼的編譯和存儲。
您可以從圖表下拉菜單中的選項選擇不同的圖表顯示圖表這些內存池的消費。 此外,點擊在右下角的角落堆和非堆圖標,將切換顯示圖表。 最後,您可以指定您跟蹤內存使用情況,從時間範圍內的下拉菜單中的選項選擇的時間範圍。
欲了解更多有關這些內存池的信息,請參閱下面的垃圾收集。
「詳細信息」區域顯示了當前內存信息:
- 已使用:目前使用的內存量,包括所有對象,可達和不可達佔用的內存。
- 分配:保證由Java虛擬機使用的內存量。 提交的內存量可能會隨時間而改變。 Java虛擬機可能會釋放系統內存,並已提交的內存量可能會少於最初啟動時分配的內存量。 提交的內存量將始終大於或等於使用的內存量。
- 最大值,可用於內存管理的最大內存量。 它的價值可能會發生變化,或者是不確定的。 如果Java虛擬機試圖增加使用的內存要大於提交的內存,內存分配可能失敗,即使使用量小於或等於最大值(例如,當系統上的虛擬內存不足)。
- GC時間:累計時間花在垃圾收集和調用的總數。 它可能有多個行,其中每一個代表一個垃圾收集器算法在Java虛擬機使用時間。
較低的右側的條形圖顯示堆和非堆內存中的內存池消耗的內存。 列會變成紅色時,使用的內存超過了內存使用閥值。
堆和非堆內存
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-7 。
圖3-7代的數據,在垃圾收集

如果垃圾收集器已經成為一個瓶頸,你可以通過自定義代大小來提高性能。 使用JConsole,你可以調查你的性能指標的敏感性實驗與垃圾收集器的參數。 欲了解更多信息,請參閱調整與5.0 HotSpot虛擬機的垃圾收集。
監視線程使用
線程「選項卡上提供了有關線程使用的信息。
圖3-8 Threads選項卡

在左下角的「線程」列表列出了所有的活動線程。 如果你輸入一個「過濾器」字段中的字符串,線程列表將只顯示其名稱中包含你輸入字符串線程。 點擊一個線程在線程列表的名稱,顯示該線程的信息的權利,包括線程的名稱,狀態,和堆棧跟蹤。
圖表顯示活動線程的數量隨着時間的推移。 兩行顯示。
- 紅色:峰值線程數
- 藍:活動線程數。
線程選項卡提供了幾個有用的操作。
- findMonitorDeadlockedThreads:檢測,如果任何線程對象監視器鎖定陷入死鎖。 此操作返回一個死鎖的線程ID數組。
- getThreadInfo:返回線程的信息。 這包括名稱,堆棧跟蹤和監測鎖,該線程目前已封鎖,如果有的話,哪個線程持有該鎖,以及線程爭用統計。
- getThreadCpuTime:返回給定的線程所消耗的CPU時間
通過MBeans選項卡,您可以通過選擇的MBean樹中的線程MXBean的這些附加功能。 這MXBean的訪問被監視的Java虛擬機線程信息列出所有的屬性和操作。 請參閱監視和管理的 MBean 。
檢測死鎖線程
要檢查如果您的應用程序已經陷入了僵局運行(例如,您的應用程序似乎是掛了),死鎖的線程可以通過點擊「檢測死鎖」按鈕檢測。 如果檢測到任何死鎖的線程,這些都顯示在一個新的標籤,旁邊出現的「主題」標籤, 在圖 3-9所示。
圖3-9僵持主題

檢測死鎖「按鈕,將涉及對象監視器和 java.util.concurrent的可擁有同步器(見API 規範文檔java.lang.management.LockInfo)檢測死鎖循環。 Java SE 6中已加入的java.util.concurrent鎖的監控支持。 如果JConsole的連接到一個J2SE 5.0 VM,檢測死鎖機制只會找到相關的對象監視器死鎖。 jconsole會不顯示任何相關的可擁有同步器的死鎖。
關於線程和守護線程的詳細信息, 請參見API文檔的java.lang.Thread。
監視類載入中
「類」標籤顯示關於類加載的信息。
圖3-10類標籤

圖表曲線加載的類的數量隨着時間的推移。
- 紅線總數(包括後來卸載的)加載的類。
- 藍線是當前的類加載。
在選項卡底部的詳細信息部分顯示類的加載,因為Java虛擬機開始的總數,當前加載和卸載的數量。 跟蹤類加載詳細的輸出,您可以勾選在頂部的右上角複選框。
查看VM信息
VM摘要「選項卡提供了對Java虛擬機的信息。
圖3-11虛擬機摘要選項卡

在此選項卡中提供的信息包括以下內容。
- 摘要
- 運行時間:開始以來,Java虛擬機的時間總額。
- 進程的CPU時間:Java VM的開始,因為它消耗的CPU時間總量。
- 編譯總時間:累計時間花費在JIT編譯。
- 主題
- 活動線程 :目前現場守護線程,加上非守護線程數量。
- 峰值:活動線程的最高數目,因為Java虛擬機開始。
- 守護線程:當前的活動守護線程數量。
- 總線程:開始自Java虛擬機啟動的線程總數,包括非守護進程,守護進程和終止的線程。
- 類
- 當前類裝載:目前加載到內存中的類數目。
- 總類加載:從Java VM開始加載到內存中的類總和,包括那些後來被卸載的類。
- 已卸載類總數:從Java虛擬機開始從內存中卸載的類的數目。
- 內存
- 當前的堆大小:目前所佔用的堆的千位元組數。
- 分配的內存:堆分配的內存總量。
- 最大堆最大值:堆所佔用的千位元組的最大數目。
- 待最後確定的對象:待最後確定的對象的數量。
- 花在執行GC的垃圾收集器:包括垃圾收集,垃圾收集器的名稱,進行藏品的數量和總時間的信息。
- 操作系統
- 總物理內存
- 空閑物理內存
- 分配的虛擬內存
- 其他信息
- VM參數:輸入參數的應用程序通過Java虛擬機,不包括的主要方法的參數。
- 類路徑是由系統類加載器用於搜索類文件的類路徑。
- 庫路徑:加載庫時要搜索的路徑列表。
- 引導類路徑:引導類路徑是由引導類加載器用於搜索類文件。
監控和管理的MBean
MBeans選項卡顯示的信息平台MBean服務器中的一個通用的方法對所有已註冊的MBean。 MBeans選項卡允許您訪問平台MXBean。 此外,您還可以監控和管理您的應用程序的MBean。
圖3-12 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-13所示。
圖3-13意外的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-14所示。
圖3-14範例的MBean樹構造使用keyPropertyList

在圖3-14中,side第一,name第二。 因為type不是在指定的鍵屬性列表類型的key,因此MBean樹算按默認次序排序。
根據公約所定義的JMX最佳實踐準則的對象的名稱, 類型的關鍵應該永遠是第一位的。 因此,要尊重本公約應從以下系統屬性JConsole的。
%JConsole的- J – Dcom.sun.tools.jconsole.mbeans.keyPropertyList =type,side,name
上面的命令將導致JConsole的渲染如圖3-15中所示
圖3-15範例的MBean樹尊重JMX的最佳實踐構建

這顯然遠遠超過難理解的圖3-13和圖3-14中顯示的MBean的樹。
MBean屬性
選擇「屬性」節點顯示一個MBean的所有屬性,圖3-16顯示了Threading的所有屬性。
圖3-16查看所有的MBean屬性

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

您可以通過雙擊右側窗體中粗體文本顯示更多信息。 例如,如果你點擊HeapMemoryUsage 對應的value值,你會看到一個圖表:圖3-18 。
圖3-18顯示的屬性值

雙擊數字屬性值將顯示一個圖表,圖,數值的變化。 例如,雙擊上的垃圾收集器的MBean 的PS Marksweep CollectionTime屬性,將顯示執行垃圾收集所花費的時間。
您還可以使用JConsole設置可寫屬性的值。 一個可寫的屬性的值顯示為藍色。 在這裡你可以看到內存的MBean的詳細屬性。
圖3-19設置可寫的屬性值

您可以通過點擊,然後編輯它們的屬性。 例如,啟用或禁用在JConsole詳細的垃圾收集器跟蹤,選擇在MBeans選項卡的MXBean 和詳細的屬性設置為真或假。 同樣,類加載的MXBean也有詳細的屬性,可以設置啟用或禁用類加載的詳細跟蹤。
MBean操作
選擇「操作」節點顯示一個MBean的所有操作。你可以通過按鈕去調用方法. 圖3-20 所有線程的方法。
Figure 3-20 Viewing All MBean Operations

選擇一個MBean樹中選擇一個方法,可以看到該方法的描述信息,如圖 3-21 .
Figure 3-21 Viewing Individual MBean Operations

MBean通知
在左邊的樹中選擇訂閱,並點擊訂閱按鈕。右側將顯示收到的通知。如圖3-22。
Figure 3-22 Viewing MBean Notifications

選擇單個MBean通知,MBeanNotificationInfo會顯示在右窗格中,如圖3-23所示。
Figure 3-23 Viewing Individual MBean Notifications

HotSpot的診斷的MXBean
JConsole的MBeans選項卡還允許你告訴HotSpot虛擬機執行堆轉儲,並通過HotSpotDiagnostic MXBean的VM選項,以獲取或設置。
Figure 3-24 Viewing the HotSpot Diagnostic MBean

您可以手動執行堆轉儲調用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

以下文章點擊率最高
Loading…