除了Dtrace與Java技術的集成之外,Java SE 6發行中還包含了許多其它的可觀察性工具。下面總結了這些工具,其中還包含一些更為詳細的鏈接說明。
(一) JConsole
JConsole使用JVM的可擴展性Java管理擴展(JMX)工具來提供關于運行于Java平臺的應用程序的性能和資源消耗的信息。
在J2SE 5.0軟件中,你需要啟動使用-Dcom.sun.management.jmxremote選項監控的應用程序。注意:在Java SE 6軟件中,不再有這一要求。當啟動該應用程序時,不需要特定的命令行選項。
在生產系統中的應用
JConsole啟動一個在被觀察的Java程序的JVM內部的JMX代理。運行另外一部分代碼僅有一點極微弱的影響-但是影響很小。
另外,盡管JConsole在監視本地應用程序的開發和快速原型開發中很有用,但在實際的應用系統中不推薦使用。理由是,JConsole本身也消耗大 量的系統資源。我們推薦的方法是用遠程監控來把JConsole應用程序與被監控的系統加以隔離。因此,對于應用系統來說,以遠程模式使用 JConsole更好些。對于安全的遠程監控來說,可以使用安全選項。
(二) jps
jps相當于Solaris進程工具ps。更多的信息,請參考《jps-Java Virtual Machine Process Status Tool》。
不象"pgrep java"或"ps -ef grep java",jps并不使用應用程序名來查找JVM實例。因此,它查找所有的Java應用程序,包括即使沒有使用java執行體的那種(例如,定制的啟動 器)。另外,jps僅查找當前用戶的Java進程,而不是當前系統中的所有進程。
(三) jstat
jstat 顯示一個測量(instrumented)Java HotSpot虛擬機的性能統計信息(請參考《jstat-Java Virtual Machine Statistics Monitoring Tool》)。有關于性能計數器的更詳細的信息請參考《Code sample-jvmstat 3.0》。
(四) jstatd
jstatd是一個Java遠程方法調用 (RMI)服務器應用程序-它監控測量Java HotSpot虛擬機的創建和終止并且提供一個接口來允許遠程監控工具依附到運行于本地主機的JVM(請參考《jstatd-Virtual Machine jstat Daemon》)。
在應用系統中的使用
jps及其它jvmstat實用程序都使用 極為輕量級的觀察機制。由JVM分配一小部分共享內存,而性能計數器也是從這部分內存中分配的。JVM子系統基于其感興趣的事件更新性能計數器。客戶端工 具僅僅負責異步地從共享內存段中進行讀取。因此,總的來說,使用jvmstat進行監控的效果是很小的。 Photoshop教程 數據結構 五筆輸入法專題
Java SE 6平臺中針對于Postmortem的可觀察性工具
Java SE 6支持postmortem可觀察性工具-它能夠從掛起的Java進程或Java核心復制中獲得信息。這些工具(除了jhat外)都使用Solaris libproc庫來依附到和讀取被觀察的程序。在觀察期間,目標程序被掛起。當Java進程被掛起或當從一個Java進程中發生一個核心復制時,可以使用 這些工具。在任何可能的情況下,請考慮使用gcore來捕獲系統的核心復制的一個快照并且使用任何下列工具"離線"分析核心復制。
(一) jinfo
jinfo打印一個給定的Java進程或核心文件或一個遠程調試服務器的Java配置信息。配置信息包括Java系統屬性和JVM命令行標志(更多信息,請參考《jinfo-Configuration Info》)。
(二) jmap
jmap:如果這個工具不使用任何選項(除了pid或core選項)運行,那么它顯示類似于Solaris的pmap工具所輸出的信息。這個工具支持針對Java堆可觀察性的若干其它選項。
在Java SE 6平臺中,新加入了一個-dump選項。這樣可以使jmap能夠把Java堆信息復制到一個文件中,然后我們可以使用新的jhat命令(見下面一節)來分析它。
jmap -dump選項并不使用Solaris libproc來實現實時處理;而是,它運行當前正運行的JVM中的一小段代碼,由此來實現堆復制。既然這種堆復制代碼運行于JVM內部,那么其速度是比 較快的。堆復制的效果大致相當于實現一次"完全的GC"(對整個堆的垃圾收集),再加上把該堆的內容寫入到文件中。實現堆復制的另外一種可能的思路是使用 gcore來進行核心復制并且運行"jmap -dump"(這與以"離線"方式運行的核心復制形成對照)。
(三) jstack
jstack等價于Solaris的pstack工具。jstack打印所有的Java線程的堆棧跟蹤信息(可選地包括本機幀信息),請參考《jstack-堆棧跟蹤》。關于鎖和死鎖的信息也可以被打印,請參考java.util.concurrent locks。
(四) jsadebugd
jsadebugd依附到一個Java進程或核心文件并且擔當一個調試服務器的作用。遠程客戶,例如jstack、jmap和jinfo,都能夠通過Java RMI依附到該服務器。
(五) jhat
jhat是一個Java堆復制瀏覽器。這個工具分析Java堆復制文件(例如,由上面的"jmap -dump"所產生的)。Jhat啟動一個允許堆中的對象在web瀏覽器中進行分析的web服務器。這個工具并不是想用于應用系統中而是用于"離線"分 析。"jhat工具是平臺獨立的",其意思是,它可以被用來觀察在任何平臺上所產生的堆復制。例如,我們有可能在Linux系統上使用jhat來觀察一個 在Solaris OS上所產生的堆復制。
把本機的java內存映像導出到heap.dmp中,其中PID為java進程的ID號。
jmap -dump:live,format=b,file=heap.dmp PID
導出后的映像文件可以用jhat來進行分析,-J是向java虛擬機傳一個參數,如-mx768m是指定虛擬機可用最大的內存為768M。如果映像文件很大,你要指定一個很大的值,否則在分析過程中就會有OutOfMemeryError的錯誤。
jhat -J-mx768m -port <端口號:默認為7000> heap.dmp
posted on 2010-04-08 14:04
Derek.Guo 閱讀(574)
評論(0) 編輯 收藏 所屬分類:
Java