運用Jconsole監控JVM

     Jconsole是JDK自帶的監控工具。它用於連接正在運行的本地或者遠程的JVM,對運行在java應用程序的資源消耗和性能進行監控,並畫出大量的圖表,提供強大的可視化界面。而且本身佔用的服務器內存很小,甚至可以說幾乎不消耗,不失爲一款好工具。
     Jconsole的使用方法,稍微複雜一些。
     首先,來看看如何使用Jconsole 連接到遠程linux服務器。
       1. 在本地安裝JDK 6.0版本。
       2. 需要在遠程服務器的jboss配置文件中,添加遠程服務端口,並啓動jboss。如下:
JAVA_OPTS=”$JAVA_OPTS -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=$HOSTNAME”
       3. 在本地java/bin目錄下找到jconsole.exe文件,運行。打開界面後,就可以連接了。

             jconsolee8bf9ee68ea5

       如果只是監聽本地的jvm內存消耗則不需要如此麻煩,只要選擇監聽“本地進程”即可。

 

       4. 當Jconsole連接成功後,它從JMX獲取信息,我們便可以在裏面監控具體的內容。 接下來,看一下這個工具的總括。
       Jconsole能捕獲到以下信息:
       概述  -  JVM概述和一些監控變量的信息
       內存  -  內存的使用信息(常用,查看jvm的內存使用情況)
       線程   - 線程的使用信息
       類       - 加載java類的信息
       VM    -  JVM摘要
       MBeans  - 所有MBeans的信息

 

 

       有了上面的概念之後,性能測試過程中需要關注哪些信息呢?一般主要關注內存欄、線程欄、類欄,概述欄和VM欄次之,MBeans欄在追蹤具體問題時用到。下面詳細說明一下使用方法。   

    1. 內存欄
     內存欄中顯示了內存堆棧消耗情況、內存池分區統計情況、垃圾回收情況等內容,並以圖表實行顯示出來。點擊圖表下拉框,可以選擇具體需要的圖。
jconsolee58685e5ad98

    特別說明,在這裏,還可以強制執行GC,另內存回收更加爽歪歪!

 

補充內容:各個內存區域(下圖紅色區域)分析

     以上圖表顯示了JVM的內存使用和時間的對應關係,包括heap和non-heap內存以及指定的(specific)內存池。內存池種類與具體使用的JVM有關,以HotSpot JVM爲例,內存池有:

(1) Eden Space(heap):大多數對象初始化時從Eden Space池分配內存,即是存在於此池中

(2) Survivor Space(heap):此池包含的對象是那些原先在eden space中,但是已經經歷過垃圾回收而仍然存在的對象。

(3) Tenured Generation(heap):在surviver space中已經存在了一段時間之後的對象會移動到這個池中。

(4) Permanent Generation(non-heap):包含虛擬機自身的所有反射數據。比如class和mothod對象。對於使用class data sharing的JVM,這一代分爲只讀和讀寫兩個區域。

Code Cache (non-heap):HotSpot JVM也包含一個“代碼緩存”,是編譯和存儲本地代碼所佔用的內存。

查看關於內存池的詳細信息:Garbage Collection.


Detail區域顯示了幾種當前內存度量:

(1) Used(已使用)當前使用的內存總量。使用的內存總量是指所有的對象佔用的內存,包括可達和不可達的對象。

(2) Committed(分配)JVM可使用的內存量。Committed內存數量可能隨時間變化而變化。JAVA虛擬機可能將某些內存釋放,還給操作系統,committed內存可能比啓動時初始分配的內存量要少。Committed內存總是大於等於used內存。

(3)Max(最大值)內存管理可用的最大內存數量。此值可能改變或者爲未定義。如果JVM試圖增加使用內存(used memory)超出了committed內存,那麼即時使用內存小於或者等於最大內存(比如系統虛擬內存較低),內存分配仍可能失敗。

 

右下角的圖表顯示了內存池在heap和non-heap消耗的內存量。當內存使用超出了內存使用閥值時,柱狀圖會變紅。你可以通過設置MemoryMXBean的一個屬性來調整內存佔用閥值。


 

 

2. 線程欄
        線程欄中顯示了當前運行的線程,並以圖表實行顯示出來。對於啓用多線程系統分析,非常有用。例如,它可以協助我們追蹤線程狀態、線程阻塞、線程等待、線程掛起、線程資源爭用問題。
jconsolee7babfe7a88b

 

 3.類欄
        類欄中顯示了當前加載類的信息。並以圖表實行顯示出來。如果要了解當前載入類的數量、已載入類的總數量、已卸載類的總數量,在這裏查看非常有用。
jconsolee7b1bb

        工具的使用,就介紹到這裏。這款工具的好處在於,佔用系統資源少,而且結合上期提到的Jstat,可以有效監控到java內存的變動情況,以及引起變動的原因。在項目追蹤內存泄露問題時,很實用。
        但是它也有缺點,就是採集的信息比較難分析,不如JProfiler直觀,需要有專業基礎才能看得懂。

 

 

 

——大部分內容轉自出處Taobao QA Team,原文地址:http://qa.taobao.com/?p=1261

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