JDK自帶的JVM性能監控工具jconsole的使用


console是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直觀,需要有專業基礎才能看得懂。

 

 本文轉載於CSDN博文

 原文地址:http://blog.csdn.net/lengyuhong/article/details/6200355


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM