1.介紹
JConsole圖形使用者界面是符合Java管理擴充(JMX)規範的監視工具,可以監測有關在Java平台上運作的應用程式的性能和資源消耗的資訊。
啟動JConsole
1
<code>jconsole [ options ] [ connection ... ]</code>
connection = pid | host:port | jmxURL
-interval=n:設定更新間隔(預設4秒)
-notile :不平鋪 (for two or more connections).
-pluginpath plugins:指定目錄,及jar路徑。
jar中必須包含 META-INF/services/com.sun.tools.jconsole.JConsolePlugin
關于jmxURL,可以參考javax.management.remote.JMXServiceURL說明。
2.本地監控
2
3
<code>% jconsole</code>
<code>#程序</code>
<code>% jconsole processID</code>

3.遠端監控
<code>%jconsole hostName:portNum</code>
3.1遠端監控配置
設定此屬性注冊了Java VM平台的MBean并通過專用接口釋出了遠端方法調用(RMI)連接配接器,以允許JMX用戶端應用程式監視本地Java平台,即與JMX客戶機在同一台機器上運作的Java VM 。
3.1開啟JMX端口
4
5
6
7
8
9
<code>com.sun.management.jmxremote</code>
<code>#JDK6以前版本,需要為Java SE示例應用程式記事本啟用JMX代理</code>
<code>%</code><code>cd</code> <code>JDK_HOME </code><code>/demo/jfc/</code> <code>Notepad</code>
<code>%java -Dcom.sun.management.jmxremote -jar Notepad.jar</code>
<code>#JDK以後版本可以啟用開箱即用的管理代理監視和管理</code>
<code>%java -jar Notepad.jar</code>
<code>#portNum是要啟用JMX RMI連接配接的端口号</code>
<code>#設定此屬性将使用衆所周知的名稱“jmxrmi”在指定端口的私有隻讀系統資料庫中釋出一個附加的RMI連接配接</code>
<code>com.sun.management.jmxremote.port = portNum</code>
對于生産系統,使用SSL用戶端證書來驗證使用者管理的用戶端主機和密碼認證。
3.2使用密碼認證
<code>#開啟或禁用</code>
<code>com.sun.management.jmxremote.authenticate=</code><code>false</code>
3.2.1 LDAP(不熟悉,不讨論)
<code>com.sun.management.jmxremote.login.config</code>
3.2.2 密碼認證
<code>-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 </code>
<code>\-Dcom.sun.management.jmxremote.ssl=</code><code>false</code>
<code>\-Dcom.sun.management.jmxremote.authenticate=</code><code>true</code>
<code>\-Dcom.sun.management.jmxremote.password.</code><code>file</code><code>=..</code><code>/conf/jmxremote</code><code>.password </code>
<code>\-Dcom.sun.management.jmxremote.access.</code><code>file</code><code>=..</code><code>/conf/jmxremote</code><code>.access</code>
其中com.sun.management.jmxremote.password.file可以從 JRE_HOME/lib/jmxremote.password.template模闆獲得;
com.sun.management.jmxremote.access.file可以同JRE_HOME/lib/jmxremote.access模闆獲得
4.功能
4.1頁籤
概述(Overview):顯示有關Java VM和監視值的概述資訊。
記憶體(Memory):顯示有關記憶體使用的資訊。
線程(Threads):顯示有關線程使用的資訊。
類(Classes):顯示有關加載類的資訊。
VM(VM Summary):顯示有關Java VM的資訊。
MBeans(MBeans):顯示有關MBean的資訊。
4.1.1概述資訊
“概述”頁籤顯示有關CPU使用情況,記憶體使用情況,線程計數以及Java VM中加載的類的圖形監視資訊,均在單個螢幕中。
JConsole允許您将圖表中顯示的資料儲存在逗号分隔值(CSV)檔案中。要從圖表儲存資料,隻需右鍵單擊任何圖表,
4.1.2 記憶體頁籤
“記憶體”頁籤提供有關記憶體消耗和記憶體池的資訊。
Eden Space (heap): 最初為大多數對象配置設定記憶體的池
Survivor Space (heap): 包含在Eden空間的垃圾回收中幸存下來的對象的池
Tenured Generation (heap):包含在幸存者空間中存在一段時間的對象的池
Permanent Generation (non-heap):包含虛拟機本身的所有反射資料的池,如類和方法對象。對于使用類資料共享的Java VM,這一代分為隻讀和讀寫區
Code Cache (non-heap): HotSpot Java VM還包括代碼緩存,其中包含用于編譯和存儲本機代碼的記憶體。
“ 詳細資訊”區域顯示幾個目前記憶體名額:
已使用(Used):目前使用的記憶體量,包括所有對象占用的記憶體,可通路和不可通路。
承諾(Committed):保證可供Java VM使用的記憶體量。承諾的記憶體量可能會随時間而變化。Java虛拟機可能會将記憶體釋放到系統,并且已送出記憶體的數量可能小于啟動時初始配置設定的記憶體量。送出的記憶體量将始終大于或等于已使用的記憶體量。
最大值(Max):可用于記憶體管理的最大記憶體量。其價值可能會改變或未定義。即使所使用的數量小于或等于最大值(例如,當虛拟記憶體系統較低時),如果Java VM嘗試增加使用的記憶體大于已送出的記憶體,則記憶體配置設定可能會失敗。
GC時間:在垃圾收集上花費的累積時間和總調用次數。它可能有多行,每行都表示Java VM中使用的一個垃圾收集器算法。
右下方的條形圖顯示堆和非堆記憶體中的記憶體池所消耗的記憶體。當使用的記憶體超過記憶體使用門檻值時,該條将變為紅色。您可以通過MemoryMXBean的屬性設定記憶體使用門檻值。
Heap and Non-Heap
非堆記憶體包括所有線程之間共享的方法區域和Java VM的内部處理或優化所需的記憶體。它存儲每個類的結構,例如運作時常量池,字段和方法資料,以及方法和構造函數的代碼.
堆記憶體是運作時資料區域,Java VM為此配置設定所有類執行個體和數組的記憶體.
記憶體池和記憶體管理器
記憶體池和記憶體管理器是Java VM記憶體系統的關鍵方面。
1.一個記憶體池表示Java虛拟機管理的存儲區。Java VM具有至少一個記憶體池,并且可能在執行期間建立或删除記憶體池。記憶體池可以屬于堆或非堆記憶體。
2.一個記憶體管理器管理一個或多個存儲池。垃圾回收器是一種負責回收由不可達對象使用的記憶體的記憶體管理器。Java VM可能有一個或多個記憶體管理器。它可能會在執行期間添加或删除記憶體管理器。記憶體池可以由多個記憶體管理器管理。
垃圾收集
4.1.3監控線程使用
“線程”頁籤提供有關線程使用的資訊。
左下角的線程清單列出了所有活動線程。如果在“過濾器”字段中輸入字元串,“線程”清單将隻顯示名稱包含您輸入的字元串的線程。單擊“線程”清單中的線程名稱,以顯示有關該線程的資訊,包括線程名稱,狀态和堆棧跟蹤。
圖表顯示随着時間的推移活動線程數。顯示兩行。
紅色:峰值線程數
藍色:活動線程數。
線程MXBean提供了幾個其他有用的操作,這些操作未被“線程”頁籤覆寫。
findMonitorDeadlockedThreads:檢測對象螢幕鎖上是否有任何線程死鎖。此操作傳回一系列死鎖的線程ID。
getThreadInfo:傳回線程資訊。這包括名稱,堆棧跟蹤和線程目前被阻止的螢幕鎖(如果有)以及哪個線程持有該鎖以及線程争用統計資訊。
getThreadCpuTime:傳回給定線程消耗的CPU時間。
2.檢測死鎖線程
4.1.4 監控類加載
“類”頁籤顯示有關類加載的資訊。
紅線是加載的類的總數(包括随後解除安裝的類)。
藍線是目前加載的類的數量。
頁籤底部的“詳細資訊”部分顯示自Java VM啟動以來加載的類的總數,目前加載的數量和解除安裝的數量。您可以通過選中右上角的複選框将類加載跟蹤設定為詳細輸出。
4.1.5 檢視VM資訊
“VM摘要”頁籤提供有關Java VM的資訊。
Summary
Uptime: Java VM啟動以來的總時間
Process CPU Time: Java VM自啟動以來消耗的CPU總時間。
Total Compile Time:在JIT 編譯中花費的總累計時間
Threads
Live threads: 目前的守護程序線程數和非守護程序線程數。
Peak: 自Java VM啟動以來最多的實時線程數。
Daemon threads: 目前的守護程序線程數。
Total threads started: Java VM啟動後啟動的線程總數,包括守護程式,非守護程式和已終止的線程。
Classes
Current classes loaded: 目前加載到記憶體中的類數。
Total classes loaded:自Java VM啟動以來加載到記憶體中的總數,包括随後解除安裝的類的總數。
Total classes unloaded:從Java VM啟動以來從記憶體中解除安裝的類數。
Memory
Current heap size: 堆目前占用的千位元組數。
Committed memory: 配置設定給堆使用的記憶體總量。
Maximum heap size:堆占用的最大千位元組數。
Objects pending for finalization:等待完成的對象數量。
Garbage collector: 有關垃圾收集的資訊,包括垃圾回收器名稱,執行的集合數以及執行GC的總時間。
Operating System
Total physical memory:作業系統具有的随機存取存儲器(RAM)的數量。
Free physical memory: 作業系統可用的可用記憶體量。
Committed virtual memory: 保證運作程序可用的虛拟記憶體量。
Other Information
VM arguments: 應用程式傳遞給Java VM的輸入參數,不包括main方法的參數。
Class path: 系統類加載器用于搜尋類檔案的類路徑。
Library path: 加載庫時要搜尋的路徑清單。
Boot class path:引導類路徑由引導類加載器用于搜尋類檔案。
本文轉自 randy_shandong 51CTO部落格,原文連結:http://blog.51cto.com/dba10g/1916416,如需轉載請自行聯系原作者