IBM和SAP開源其JVM診斷工具

IBM最近發佈了其Java診斷工具套件,該套件包含以下工具:面向Java的產品轉儲分析器(Dump Analyzer)、處理垃圾收集(GC,即Garbage Collection)的Extensible Verbose Toolkit和Java鎖分析器(JLA,即Java Lock Analyzer)。IBM的 alphaWorks團隊從事這些JVM工具的開發工做,而且在一個叫作 Java diagnostics, IBM style的技術系列文章中公佈了關於如何使用它們的一些細節信息。SAP上個月也發佈了一個關於其堆分析器工具(heap analyzer tool)的 聲明,該工具叫作SAP內存分析器(SAP Memory Analyzer),該工具已集成到Eclipse IDE中。

對於從事或者被迫從事(有時就是這種狀況)分析和解釋JVM性能及診斷數據的工做的那些Java開發者來講,在工做時並無多少敏捷開源的工具可供使用,而僅僅經過查看文本格式的日誌文件內容來分析JVM的性能會讓人感到很是沮喪。尤爲是當開發小組被告知將與JVM相關的分析診斷工做推遲到產品環境中,這個問題就更讓人不知所措了,由於在Java產品環境中很難去分析日誌而且快速定位問題產生的根源。對於線程產生的日誌則更是如此,在沒有可視化工具的支持下去解釋和分析它將是異常複雜的。php

Java Dump AnalyzerGarbage Collection Analysis Toolkit能夠IBM的JVM上運行,能夠經過IBM Support Assistant(ISA)下載得到,ISA是一個免費的軟件平臺,咱們能夠用其下載或者與IBM的軟件產品協同工做。html

轉儲分析器(Dump Analyzer):

該工具能對已產生且格式化良好的系統轉儲文件進行基本的分析工做,能夠從ISA程序或者命令行中加載。它基於IBM的面向Java的診斷工具框架(Diagnostic Tooling Framework for Java or DTFJ),該框架是一套API集合,用來構建其餘的Java診斷工具。DTFJ的API容許工具對問題進行分析而且在分析結果中產生報告信息。java

使用轉儲分析器進行分析的過程是從建立一個基於用戶已選擇數據的DTFJ映像開始的,該映像包含了運行時參數,Java線程和堆中的對象等整個操做系統的全貌。而後它基於用戶選定的模塊對映像進行分析。一旦對全部選定模塊的分析工做所有完成,轉儲分析器將產生一個HTML或ASCII格式的分析結果報告。web

轉儲分析器是可擴展的,Java開發者能夠經過繼承其API來編寫本身的定製分析模塊架構

垃圾收集分析工具:

咱們能夠用該工具來診斷冗長的GC日誌和一些與內存相關的JVM性能問題。若是配置錯誤的話,JVM中的GC進程將消耗更多的資源,最終會讓Java應用變得很慢,甚至可能使其崩潰。該工具能處理IBM JRE1.4.2及更高版本的日誌,它還能被用來分析WebSphere Real Time sever產生的GC日誌。框架

該工具能夠分析單獨的GC日誌,也能對多個日誌文件進行並列比較,當咱們經過比較代碼改動先後垃圾回收的趨勢來解決內存泄露或JVM性能問題時,這一功能就很是有用。開發人員還能夠對GC日誌進行數據過濾,將注意力集中在特定內容上。該工具還提供了模板,讓Java開發者保存個性化的設定以供未來使用。jsp

IBM developerWorks網站上還發佈了關於該工具的文章以說明如何安裝、加載該工具,如何打開一個文件進行分析以及如何同時比較多個文件。該文章還涵蓋了三個學習用例:關於內存泄露的診斷,如何調整JVM的堆空間大小以及如何基於垃圾回收日誌來評估Java應用的吞吐量。工具

鎖分析器(Lock Analyzer):

面向Java的鎖分析器是IBM alphaWorks的一個項目,能夠爲在線java應用提供一個實時、動態的鎖監視器。它運行在IBM的JVM(5.0或更高版本)上,對java應用進行鎖分析以提供線程活動,線程對鎖的爭奪以及同步問題的細節信息。

鎖分析器的架構包含了兩個組件:JLAagent和JLAGui,前者提供了與JVM的鏈接以蒐集正在運行應用的鎖信息,後者是一個基於Swing的GUI組件,提供對鎖分析數據的圖形化顯示。JLAGui經過MBeans API鏈接到JLAagent,所以服務端和GUI客戶端既能夠在本地、也能夠遠程進行通訊。性能

SAP的Memory Analyzer能夠用來查看堆轉儲,堆轉儲是在其生成那一刻JVM內存中全部對象的快照。該內存分析器支持來自SUN,HP和SAP(JDK1.4.2,Java SE 5和 6)的一系列JVM,因爲它基於Eclipse RCP(Rich Client Platform),因此它能夠做爲獨立產品來使用,也能夠做爲Eclipse插件來使用,咱們能夠直接在Eclipse中加載它。學習

該內存分析器提供了不一樣的視圖來查看堆中的信息,這是經過「類的柱狀圖羣(Class Histogram Grouping)」來實現的,它顯示了內存中全部對象的一個列表,而且顯示了對象的數量以及他們所佔據的堆空間大小(單位爲字節)。咱們能夠經過「支配樹(Dominator Tree)」視圖查看佔據最大堆空間的那些對象(單個對象或是一個類的一組對象),若是這些對象能夠被垃圾回收器回收,那麼它們所佔據的堆空間就會被釋放。其餘的視圖還包括「Leak Suspects」視圖和「Paths from GC roots」視圖,前者顯示可能致使內存泄露的那些對象,後者顯示了可能致使內存泄露的對象的垃圾收集的細節以及他們在垃圾收集過程當中的源頭。全部這些視圖都以可視化的方式來展示應用中還沒有被垃圾收集進程清理的對象。

當須要分析JVM日誌時,除了IBM和SAP外,咱們手邊還有其餘一些免費的JVM日誌查看工具可使用。下面是這些工具的一個列表,按照他們所支持的分析類型來進行的分類。

線程轉儲分析:

在這個類別裏,IBM Thread and Monitor Dump分析器、Thread Dump分析器和Lockness是比較經常使用的線程日誌分析器。

IBM Thread Dump Analyzer只能在IBM支持的JVM上工做,本文做者試圖在java應用中使用Sun的JVM開啓一個線程,可是該工具沒法識別該線程日誌的格式。TDA是一個能夠對線程日誌進行離線分析的實用工具。Lockness analyzer是一個Eclipse插件,所以它能夠在Eclipse中加載。

堆快照分析(Heap snapshot analysis):

IBM Heap Analyzer使得java開發者能夠經過堆日誌來查看JVM內存信息,該工具與Sun的JDK協同工做,可是在顯示堆中的細節信息時它不如SAP的內存分析器來的直接。

HAT是java.net上的一個項目,它能以一系列網頁的形式來顯示堆中的信息,並以不一樣的視圖展現內存的使用細節。有幾個顯示堆信息的視圖可供咱們使用,可是在不一樣的視圖間追蹤堆中的細節絕非易事。

HPjTuneHPjMeter是來自HP的堆分析工具。本文做者試圖打開在Sun JVM上運行的java應用所產生的堆信息日誌時,HPjTune卻沒法識別該文件。

垃圾收集日誌分析(GC log analysis):

在這個類別裏,GCViewer是一個很是棒的工具,用來查看已產生的垃圾收集日誌。它支持大多數公司的JVM,例如:Sun,IBM,HP-UX和BEA JRockit等。從命令行安裝並運行它將很是簡單。GCViewer以圖表方式顯示Young和Tenured generation的垃圾收集的信息,包括所有或局部垃圾收集時間。在Java Performance Tuning網站上關於GCViewer的一則評論討論瞭如何根據垃圾收集日誌,使用GCViewer來對一個典型的java應用進行性能調優。

新版的JDK(Java SE 5及後續版本)內置提供了優秀的 JVM監視和管理能力,可是對於那些仍然使用早期的JDK版本(JDK1.4及更早版本)工做的開發者來講,若是要分析JVM日誌,本文所討論的工具就可派上用場。這些工具都有本身獨有的特性,開發者必須先對工具進行評估,再決定使用哪一款進行JVM性能監控和錯誤診斷。

相關文章
相關標籤/搜索