隨筆-86  評(píng)論-33  文章-0  trackbacks-0

               除了Dtrace與Java技術(shù)的集成之外,Java SE 6發(fā)行中還包含了許多其它的可觀察性工具。下面總結(jié)了這些工具,其中還包含一些更為詳細(xì)的鏈接說(shuō)明。

          (一) JConsole

          JConsole使用JVM的可擴(kuò)展性Java管理擴(kuò)展(JMX)工具來(lái)提供關(guān)于運(yùn)行于Java平臺(tái)的應(yīng)用程序的性能和資源消耗的信息。

          在J2SE 5.0軟件中,你需要啟動(dòng)使用-Dcom.sun.management.jmxremote選項(xiàng)監(jiān)控的應(yīng)用程序。注意:在Java SE 6軟件中,不再有這一要求。當(dāng)啟動(dòng)該應(yīng)用程序時(shí),不需要特定的命令行選項(xiàng)。

          在生產(chǎn)系統(tǒng)中的應(yīng)用

          JConsole啟動(dòng)一個(gè)在被觀察的Java程序的JVM內(nèi)部的JMX代理。運(yùn)行另外一部分代碼僅有一點(diǎn)極微弱的影響-但是影響很小。

          另外,盡管JConsole在監(jiān)視本地應(yīng)用程序的開(kāi)發(fā)和快速原型開(kāi)發(fā)中很有用,但在實(shí)際的應(yīng)用系統(tǒng)中不推薦使用。理由是,JConsole本身也消耗大 量的系統(tǒng)資源。我們推薦的方法是用遠(yuǎn)程監(jiān)控來(lái)把JConsole應(yīng)用程序與被監(jiān)控的系統(tǒng)加以隔離。因此,對(duì)于應(yīng)用系統(tǒng)來(lái)說(shuō),以遠(yuǎn)程模式使用 JConsole更好些。對(duì)于安全的遠(yuǎn)程監(jiān)控來(lái)說(shuō),可以使用安全選項(xiàng)。

          (二) jps

          jps相當(dāng)于Solaris進(jìn)程工具ps。更多的信息,請(qǐng)參考《jps-Java Virtual Machine Process Status Tool》。

          不象"pgrep java"或"ps -ef grep java",jps并不使用應(yīng)用程序名來(lái)查找JVM實(shí)例。因此,它查找所有的Java應(yīng)用程序,包括即使沒(méi)有使用java執(zhí)行體的那種(例如,定制的啟動(dòng) 器)。另外,jps僅查找當(dāng)前用戶的Java進(jìn)程,而不是當(dāng)前系統(tǒng)中的所有進(jìn)程。

          (三) jstat

          jstat 顯示一個(gè)測(cè)量(instrumented)Java HotSpot虛擬機(jī)的性能統(tǒng)計(jì)信息(請(qǐng)參考《jstat-Java Virtual Machine Statistics Monitoring Tool》)。有關(guān)于性能計(jì)數(shù)器的更詳細(xì)的信息請(qǐng)參考《Code sample-jvmstat 3.0》。

          (四) jstatd

          jstatd是一個(gè)Java遠(yuǎn)程方法調(diào)用 (RMI)服務(wù)器應(yīng)用程序-它監(jiān)控測(cè)量Java HotSpot虛擬機(jī)的創(chuàng)建和終止并且提供一個(gè)接口來(lái)允許遠(yuǎn)程監(jiān)控工具依附到運(yùn)行于本地主機(jī)的JVM(請(qǐng)參考《jstatd-Virtual Machine jstat Daemon》)。

          在應(yīng)用系統(tǒng)中的使用

          jps及其它jvmstat實(shí)用程序都使用 極為輕量級(jí)的觀察機(jī)制。由JVM分配一小部分共享內(nèi)存,而性能計(jì)數(shù)器也是從這部分內(nèi)存中分配的。JVM子系統(tǒng)基于其感興趣的事件更新性能計(jì)數(shù)器??蛻舳斯?具僅僅負(fù)責(zé)異步地從共享內(nèi)存段中進(jìn)行讀取。因此,總的來(lái)說(shuō),使用jvmstat進(jìn)行監(jiān)控的效果是很小的。 Photoshop教程 數(shù)據(jù)結(jié)構(gòu) 五筆輸入法專題



          Java SE 6平臺(tái)中針對(duì)于Postmortem的可觀察性工具

          Java SE 6支持postmortem可觀察性工具-它能夠從掛起的Java進(jìn)程或Java核心復(fù)制中獲得信息。這些工具(除了jhat外)都使用Solaris libproc庫(kù)來(lái)依附到和讀取被觀察的程序。在觀察期間,目標(biāo)程序被掛起。當(dāng)Java進(jìn)程被掛起或當(dāng)從一個(gè)Java進(jìn)程中發(fā)生一個(gè)核心復(fù)制時(shí),可以使用 這些工具。在任何可能的情況下,請(qǐng)考慮使用gcore來(lái)捕獲系統(tǒng)的核心復(fù)制的一個(gè)快照并且使用任何下列工具"離線"分析核心復(fù)制。

          (一) jinfo

          jinfo打印一個(gè)給定的Java進(jìn)程或核心文件或一個(gè)遠(yuǎn)程調(diào)試服務(wù)器的Java配置信息。配置信息包括Java系統(tǒng)屬性和JVM命令行標(biāo)志(更多信息,請(qǐng)參考《jinfo-Configuration Info》)。

          (二) jmap

          jmap:如果這個(gè)工具不使用任何選項(xiàng)(除了pid或core選項(xiàng))運(yùn)行,那么它顯示類似于Solaris的pmap工具所輸出的信息。這個(gè)工具支持針對(duì)Java堆可觀察性的若干其它選項(xiàng)。

          在Java SE 6平臺(tái)中,新加入了一個(gè)-dump選項(xiàng)。這樣可以使jmap能夠把Java堆信息復(fù)制到一個(gè)文件中,然后我們可以使用新的jhat命令(見(jiàn)下面一節(jié))來(lái)分析它。

          jmap -dump選項(xiàng)并不使用Solaris libproc來(lái)實(shí)現(xiàn)實(shí)時(shí)處理;而是,它運(yùn)行當(dāng)前正運(yùn)行的JVM中的一小段代碼,由此來(lái)實(shí)現(xiàn)堆復(fù)制。既然這種堆復(fù)制代碼運(yùn)行于JVM內(nèi)部,那么其速度是比 較快的。堆復(fù)制的效果大致相當(dāng)于實(shí)現(xiàn)一次"完全的GC"(對(duì)整個(gè)堆的垃圾收集),再加上把該堆的內(nèi)容寫入到文件中。實(shí)現(xiàn)堆復(fù)制的另外一種可能的思路是使用 gcore來(lái)進(jìn)行核心復(fù)制并且運(yùn)行"jmap -dump"(這與以"離線"方式運(yùn)行的核心復(fù)制形成對(duì)照)。

          (三) jstack

          jstack等價(jià)于Solaris的pstack工具。jstack打印所有的Java線程的堆棧跟蹤信息(可選地包括本機(jī)幀信息),請(qǐng)參考《jstack-堆棧跟蹤》。關(guān)于鎖和死鎖的信息也可以被打印,請(qǐng)參考java.util.concurrent locks。

          (四) jsadebugd

          jsadebugd依附到一個(gè)Java進(jìn)程或核心文件并且擔(dān)當(dāng)一個(gè)調(diào)試服務(wù)器的作用。遠(yuǎn)程客戶,例如jstack、jmap和jinfo,都能夠通過(guò)Java RMI依附到該服務(wù)器。

          (五) jhat

          jhat是一個(gè)Java堆復(fù)制瀏覽器。這個(gè)工具分析Java堆復(fù)制文件(例如,由上面的"jmap -dump"所產(chǎn)生的)。Jhat啟動(dòng)一個(gè)允許堆中的對(duì)象在web瀏覽器中進(jìn)行分析的web服務(wù)器。這個(gè)工具并不是想用于應(yīng)用系統(tǒng)中而是用于"離線"分 析。"jhat工具是平臺(tái)獨(dú)立的",其意思是,它可以被用來(lái)觀察在任何平臺(tái)上所產(chǎn)生的堆復(fù)制。例如,我們有可能在Linux系統(tǒng)上使用jhat來(lái)觀察一個(gè) 在Solaris OS上所產(chǎn)生的堆復(fù)制。

          把本機(jī)的java內(nèi)存映像導(dǎo)出到heap.dmp中,其中PID為java進(jìn)程的ID號(hào)。
          jmap -dump:live,format=b,file=heap.dmp PID

          導(dǎo)出后的映像文件可以用jhat來(lái)進(jìn)行分析,-J是向java虛擬機(jī)傳一個(gè)參數(shù),如-mx768m是指定虛擬機(jī)可用最大的內(nèi)存為768M。如果映像文件很大,你要指定一個(gè)很大的值,否則在分析過(guò)程中就會(huì)有OutOfMemeryError的錯(cuò)誤。
          jhat -J-mx768m -port <端口號(hào):默認(rèn)為7000> heap.dmp

          posted on 2010-04-08 14:04 Derek.Guo 閱讀(581) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          MSN:envoydada@hotmail.com QQ:34935442
          主站蜘蛛池模板: 东兴市| 海盐县| 贵港市| 上林县| 佛教| 邯郸县| 临桂县| 土默特左旗| 禄劝| 临颍县| 麟游县| 邯郸市| 肥乡县| 砚山县| 卓尼县| 安西县| 南宫市| 峨眉山市| 新宾| 南江县| 金山区| 阿尔山市| 邯郸市| 三穗县| 汶上县| 抚松县| 宜兰县| 陆川县| 庄浪县| 长寿区| 呼图壁县| 德阳市| 湖口县| 陆川县| 英吉沙县| 昌图县| 奉贤区| 琼海市| 隆德县| 哈巴河县| 庄浪县|