jconsole tomcat內存監控設置

原文地址:http://blog.csdn.net/chuangxin/article/details/6035776

 

Jconsole是JDK自帶的一個很好的jvm查看工具,免費不用說,而且內存狀態刷新的快,垃圾回收也快。由於,需要監控一個即將上線的web應用是否有內存泄露,即需要監控tomcat的jvm內存狀況。Jconsole是基於jmx進行通信、信息發送獲取的,因此需要對tomcat進行相應設置,jconsole纔可監控tomcat。

       1、windows下,通常是我們的開發環境

       Windows下,通常是我們的開發環境設置tomcat相關參數,首先反應是修改catalina.bat等文件,我個人意見這些啓動文件能不改儘量不改,沒多大好處。幸運的是,我們現在java開發基本上都是基於eclipse或者myeclipse的,因此只要的eclipse或者myeclipse服務器配置中,設置tomcat服務器的啓動參數即可。

       如myeclipse8.5,windows—>preferencesàmyeclipseàserversàtomcat6,在其JDK optional java vm arguments設置中,輸入下述內容即可:

       -Xmx256m -Xms128m

-Djava.rmi.server.hostname=192.168.10.101

-Dcom.sun.management.jmxremote.port=8061

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

       設置完畢後,在myeclipse中啓動tomcat,我們即可啓動jconsole連接 192.168.0.1:8061進行tomcat的jvm內存監控。

       2、linux下

       現在,大多數生產機的tomcat應用都是部署在linux或者unix機器上,windows上很少,本文以linux爲例。

       還是基於我剛纔的原則,不修改catalina.sh等啓動文件。我們手工創建一個start文件,內容如下:

       JAVA_HOME=/usr/java/jdk1.6.0_06/

TOMCAT_HOME=/usr/java/apache-tomcat-6.0.16

PATH=$JAVA_HOME/bin:TOMCAT_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

CATALINA_OPTS="-Xmx3072m -Xms3072m -Djava.rmi.server.hostname=192.168.1.101 -Dcom.sun.management.jmxremote.port=8061 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password"

export CATALINA_OPTS

/usr/java/apache-tomcat-6.0.16/bin/startup.sh

將start文件存放到tomcat bin目錄下,則我們只要以下指令即可啓動tomcat:

at –f /usr/java/apache-tomcat-6.0.16/bin/start now

由於是生產機的設置,因此設置Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password,jconsole連接192.168.1.101:8061時需要用戶名和口令驗證,確保安全性。

實際上會用到2個文件,jmxremote.access文件和jmxremote.password文件,前者設置用戶,後者設置用戶及對應的口令。這連個文件在$JAVA_HOME/jre/lib/management都有,我們只要修改其中的用戶和口令即可。

這裏一個需要特別注意的是jmxremote.password訪問權限一定要設置好,設置成owner可讀即可,否則tomcat啓動失敗,會報類似jmxremote.password resticted錯誤。

 

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

     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文件,運行。打開界面後,就可以連接了。

            

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

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

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

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

    特別說明,在這裏,還可以強制執行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. 線程欄
        線程欄中顯示了當前運行的線程,並以圖表實行顯示出來。對於啓用多線程系統分析,非常有用。例如,它可以協助我們追蹤線程狀態、線程阻塞、線程等待、線程掛起、線程資源爭用問題。

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

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

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

 

另:

http://hi.baidu.com/xuwanbest/blog/item/3f6d4c7b375ff4f10bd18731.html

發佈了42 篇原創文章 · 獲贊 4 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章