程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> IBM的Java診斷,第1部分

IBM的Java診斷,第1部分

編輯:關於JAVA

介紹面向 Java 的 IBM 轉儲分析器(IBM Dump Analyzer)

簡介:Java™ 應用程序已經變得越來越復雜;因此,對這些應用程序進行問題診斷變得不再輕 松,並且可能需要某個外部服務組織做大量的工作。若能夠指明正確的方向將節省時間和費用。IBM Dump Analyzer for Java 工具可以對格式化的系統轉儲做基本分析並生成簡明的報告,指導您如何進行下一步 操作。

Java 語言已經成為軟件開發中的主導語言,因此, Java 虛擬機(VM)的穩定性成為一個 非常重要的問題。VM 通常是一種可靠的軟件,但是出於各種原因在運行時還是會發生錯誤。這些問題中 的少數是由於 VM 自身錯誤導致;但是在大多數情況下,導致問題的原因是由於 VM(比如 IBM® WebSphere® Application Server)之上的軟件堆棧或應用程序本身的錯誤或配置不當。

隨著信息技術的成熟,一個典型項目的軟件堆棧變得日益復雜,這也導致開發人員確定問題原因的難 度日益增大。在這麼一個復雜的環境下,您為了診斷一個錯誤,可能要面對大量的信息。在生產環境中, 可能要面對以 GB 字節計算的堆,數以百計的線程,數以千計的類加載器,數以萬計的類以及巨大數目的 對象。

IBM Dump Analyzer for Java(此後稱為 Dump Analyzer)是為解決此困難而出現的一種 可擴展框架。所有內部 IBM 用戶和外部客戶都可以使用它,配合 IBM 的 Java 平台開發包(IBM SDK) 來診斷問題。它用分析器 審查格式化的系統轉儲(每個分析器對轉儲執行一個特定詢問)並用腳本把結 果連接起來形成一個簡明的分析報告。其最早的兩個版本中,Dump Analyzer 將報告如下四項內容之一:

內存不足

死鎖檢測

VM 得到信號而終止(由於內部或中間件/Java 應用程序錯誤)

需要執行進一步調查

前三項都可映射到某類 VM 問題,這些問題在本文的下一節闡述。

閱讀本文後面的內容並不需要背景知識。您可以獲得使用 Dump Analyzer 分析系統轉儲的分步指導, 同時從較高層次大致了解該工具及其體系結構。閱讀完本文後,您應當能夠深刻地理解在何種情況下需要 使用 Dump Analyzer,並對其基礎架構有一定的了解。

從較高層次查看 VM 問題類型

VM 在執行時出現的故障可能有多種方式,每種故障都需要不同的診斷方法。在您詳細了解 Dump Analyzer 的工作之前,有必要檢視這些不同類型的問題以及為解決它們所需要做的分析。

內存不足

VM 可能由於內存不足而失敗 — VM 使用 Java 堆內存或本地內存來存放線程堆棧、類信息、JIT 代 碼、圖像元素以及其它與操作系統交互所需的器件。

診斷此類問題可能會異常困難,因為導致問題的內存分配本身並非罪魁禍首;某個大的內存集合可能 一直在增長,直到 VM 最終耗盡所有可用堆空間。通常,需要檢查堆的內容並將不同時期的堆快照進行對 比,從而才能確定快速增長的內存集合。

死鎖

所謂死鎖,是指兩個以上的進程之間互相等待對方釋放資源。某個占有資源的線程(如監視器)無法 獲得另一資源的所有權,因為該資源被另一線程所有而且它正在試圖獲得第一個線程占用的資源的所有權 。這種錯誤經常表現為性能問題。相對而言這比較容易診斷,只需檢查線程狀態以及它們所擁有的資源。

內部錯誤

導致內部錯誤的原因包括:

本機代碼可能嘗試訪問具有無效輸入(如過時的本地引用)或編碼錯誤的對象。

垃圾收集器可能錯誤地收回某些存儲,當引用這些存儲時,似乎包含到尚未初始化內存的指針。

JIT 編譯器可能生成錯誤代碼,該代碼引用或嘗試對無效的位置進行分支。

Java 應用程序或中間件的錯誤

Dump Analyzer 目前處理在 VM 自身發生或檢測到的錯誤,但最終這些工具集將能夠診斷在 VM 中運 行的 Java 應用程序或中間件中的各種錯誤和不正確的行為。發生這些錯誤有各種潛在的原因;它們通常 是由於應用程序或中間件代碼中的缺陷或 JVM 選項的錯誤配置造成的。一般,通常檢查應用程序或中間 件中各種數據結構的狀態即可確定該狀態的錯誤因素。

當前的問題診斷情況

如果沒有像 Dump Analyzer 這樣的工具,您通常會首先檢查故障點處 VM 生成的產物, 從而開始診 斷問題。通常,它們是:

進程空間轉儲(系統轉儲或核心文件)

Java 堆轉儲(堆轉儲)

Java 進程快照(Javacore 文件)

顯示某些執行歷史記錄的跟蹤文件

通常,您應該使用每種特定格式的專門程序分別檢查這些產物。那麼確定問題的過程主要是手動檢查 可用的信息。隨著數據量的增加,該過程變得越來越費時,工作變得越來越專業。因此,客戶通常不願意 自己執行分析,而是依賴他們的 VM 或中間件供應商來執行該操作,但報告的大多數問題最終都被診斷為 應用程序、配置或環境問題,這些問題不需要對 VM 或中間件本身的代碼進行任何更改。理想情況下,客 戶可用的診斷功能將確保只將需要更改代碼的缺陷報告給 VM 或中間件供應商。其他問題將使用 VM 生成 的相應產物自動進行診斷。

Dump Analyzer 概述

Dump Analyzer 是一個基於 Diagnostic Tooling Framework for Java(DTFJ;您將在本文的後面部 分進一步了解)的工具,設計為分析系統轉儲並查找各種類型的問題。該工具由很多小的分析模塊組成, 這些模塊查看特定的轉儲數據並確定是否存在特殊問題(例如,死鎖)。該設計可以輕松容納其他新功能 並且可以進行定制以查找特定問題。

該工具在兩個級別運行:

每個具體的分析模塊都嘗試診斷一個特定的問題類型 並生成一個簡單說明描述已發現的問題。

當不能進行診斷時,每個分析模塊都會生成一個有關系統狀態的某個方面的 詳細報告。故障診斷專家 可以使用該報告, 也可以將該報告與其他信息結合使用以診斷問題。

為了進一步增加靈活性,使用簡單腳本語言來控制分析流程。 我們的團隊計劃將來通過提供很多不同 的腳本來開發此實用工具。

下面是該工具的分析流程:

工具加載用戶所選擇的轉儲數據以創建用於進行進一步分析的圖像。

用戶根據該圖像選擇要運行的一個或多個分析模塊;如果用戶沒有選擇具體的分析器,則運行默認的 腳本。

運行分析模塊。

每個模塊返回控制更詳細的分析流程的信息或將該信息生成一個報告。

所有模塊都已完成其運行之後,將該報告格式化為 HTML 或文本文檔。

如上所述,如果用戶沒有請求具體的分析模塊,則該工具運行默認的腳本 (general.sml),該腳本運 行一組檢查幾種常見問題類型的分析器。如果這些問題都沒有檢測到,則腳本調用默認的報告,它介紹有 關生成轉儲時 VM 狀態的某些常規信息。

在本文的後面部分,您將看到一個使用 Dump Analyzer 的示例,並大致了解一些可選的非默認的分析 模塊。

使用 Dump Analyzer 所需的設置

所有 Dump Analyzer 所需的就是運行格式化的系統轉儲。系統轉儲在 VM 崩潰時默認發生;但是可以 配置 VM 以創建在其他故障情況下的轉儲或用戶請求時的轉儲。

若要格式化系統轉儲,您需要針對其運行 jextract 工具。在生成轉儲的相同機器上使用相同的 VM, 只需運行以下命令行:

jextract "corefilename"

借助 1.4.2 級別的 VM,該命令生成一個 .sdff 文件;在版本 5.0 或更高版本的 VM 上,它生成一 個 .dmp.zip 文件。另請注意,在不同的平台上,可能提供了不同的選項控制在操作系統級別生成的轉儲 的格式。尤其有一些選項會造成系統轉儲中斷從而導致 Dump Analyzer 不會生成有用的診斷。最常見的 錯誤(在 UNIX® 系統上)是忘記將 ulimit 設置為 unlimited,而在其他平台上也有其他重要選項 。為了避免此類問題,請參考 IBM 診斷指南中的信息或搜索 IBM 軟件支持網站以使用關鍵詞 “truncated core” 獲得特定平台的技術說明。

在 IBM Support Assistant 內使用 Dump Analyzer

TDump Analyzer 的主要發行工具是 IBM Support Assistant (之後稱為 ISA)。ISA 可用於所有內部 IBM 用戶和外部客戶。

您可以按 照如下方式安裝 Dump Analyzer 和 ISA:

確保安裝了版本 3 的 ISA。

若要安裝 Dump Analyzer,您必須安裝與其相關的一個產品插件 — 例如,IBM Developer Kit for Java。

重新啟動 ISA 客戶機。現在您可以安裝工具插件。

轉到 Updater 服務。有兩種方法可以 實現:

單擊 Welcome 頁面上的 Updater 圖標。

單擊菜單欄上的 Updater 鏈接。

選擇 New Plug-ins 選項卡並等待 ISA 構建可用於安裝的插件編目。

打開 Common Component Tools 文件夾。

選擇 IBM Dump Analyzer for Java (Tech Preview) 並安裝。

安裝完 Dump Analyzer 之後,您可以從 ISA 中啟動它:

重新啟動 ISA。

選擇 Tools。

選擇 Dump Analyzer 可用的產品 — 例如,IBM Developer Kit for Java。

單擊 IBM Dump Analyzer for Java (Tech Preview) 即可啟動該工具。您的屏幕 應該如圖 1 所示:

圖 1. ISA 中的 Dump Analyzer

下面是如何分析格式化的系統轉儲:

輸入合格的系統轉儲名稱以進行分析(該系統轉儲已執行過格式化)。

單擊 Estimate Time 即可收到分析所需時間的大概估計。

單擊 Analyze。完成後結果將出現在窗口中。

圖 2 顯示 Dump Analyzer 生成的錯誤摘要示例:

圖 2. 錯誤摘要示例

單擊 Analyze Another 返回到如圖 1 所示的屏幕,仍然在第一個文本框中輸入以前輸入的轉儲文件 名稱。

選擇分析模塊

圖 1 和 2 中調用屏幕的標簽為 Optional Parameters 的字段控制將執行的分析程序集,以及其他運 行時選項。通常,您應該將該字段保留為空;這樣將執行默認的分析腳本 general.sml。該腳本檢查最常 見的問題類型。但是,如果已經知道所調查問題的具體類型,或者您需要解決未集成到默認腳本中的問題 ,則可以明確指定要調用的一個或多個分析程序。可以通過特定腳本文件的名稱或特定分析程序模塊的類 名稱來調用這些分析程序。在 Optional Parameters 字段中鍵入 -help 將列出更詳細的運行時選項。

在第一個版本的工具中,除了默認的腳本之外,只提供非常少量的試驗分析程序。它們包括:

DefaultDumpReport(類名:com.ibm.dtfj.analyzer.deal.basic.DefaultDumpReport): 該分析程 序生成關於 VM 狀態的所有主要方面的詳細報告, 有點類似於 Javacore 文件的內容(但還包含其他一 些特定於 DTFJ 的信息)。

ListZipJars(類名:com.ibm.dtfj.analyzer.deal.extended.ListZipJars):該試驗性分析程序嘗 試發現 VM 內當前打開的所有 zip 和 JAR 文件,它們可能提供對應用程序或中間件所使用的任何自定義 庫的深入分析。

SystemProperties(類名:com.ibm.dtfj.analyzer.deal.extended.SystemProperties): 該試驗性 分析程序掃描 VM 並打印在該 VM 中定義的每個 Java 系統屬性的當前值。

WASBasicInfo(類名:com.ibm.dtfj.analyzer.deal.was.WASBasicInfo): 這是一個非常初級而且 是試驗版本的分析程序,它演示使用該工具檢查在 VM 內部執行的 WebSphere Application Server 運行 時的狀態。

當前提供的這些額外的分析程序幾乎都演示了該工具的靈活性。將來將發布很多其他專門的分析程序 以及文檔。此外,在本系列的第四篇文章中,您將學習如何編寫您自己的分析程序以補充該工具本身所提 供的那些分析程序。

從命令行使用 Dump Analyzer

在某些情況下,您可能會發現從命令行運行 Dump Analyzer 非常有幫助(例如,如果需要將分析合並 到某些現有的問題處理工作流程中)。使用 Dump Analyzer 的最簡單方法是通過 ISA,您已經看到如何 下載 ISA 中的 Dump Analyzer。

若要單獨運行 Dump Analyzer,需要四個 JAR 文件和一個腳本文件。它們是:

dumpAnalyzer.jar(位於 installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(version number)/WEB-INF/lib 中)

dtfj-interface.jar(位於 installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(version number)/WEB-INF/lib/j9 中)

用於 Java 5.0 和更高版本的 dtfj.jar(位於 installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(version number)/WEB-INF/lib/j9 中)

用於 Java 1.4.2 的 dtfj.jar (位於 installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(version number)/WEB-INF/lib/sov 中)

general.sml(位於 installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(version number) 中)

在所有這些文件路徑中,installDir 表示 ISA 安裝目錄;默認情況下為 C:\Program Files\IBM\IBM Support Assistant v3 on Microsoft Windows 或 /opt/IBM/IBM Support Assistant v3 on Linux™。您可以在其他位置復制這些文件,也可以從 installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(version number) 目錄直接運行 Dump Analyzer。盡管 ISA 只能在 Windows 和 Linux 上使用,但是您可以從任何平台的命令行運行 Dump Analyzer。

下面是從 Windows 上的默認目錄運行 Dump Analyzer 的命令步驟:

set CP=WEB- INF/lib/dumpAnalyzer.jar

set BCP=WEB-INF/lib/j9/dtfj.jar;WEB-INF/lib/j9/dtfj- interface.jar;WEB-INF/lib/sov/dtfj.jar

java -cp %CP% -Xbootclasspath/p:%BCP% com.ibm.dtfj.analyzer.base.DumpAnalyzer (dumpName) (options)

下面是 Linux 的步 驟:

export CP=WEB-INF/lib/dumpAnalyzer.jar

export BCP=WEB- INF/lib/j9/dtfj.jar:WEB-INF/lib/j9/dtfj-interface.jar:WEB-INF/lib/sov/dtfj.jar

java -cp $CP -Xbootclasspath/p:$BCP com.ibm.dtfj.analyzer.base.DumpAnalyzer (dumpName) (options)

其中,dumpName 是要分析的完全合格的轉儲名稱,options 是可以用於配置 Dump Analyzer 的運行 時參數。運行 -help 選項將打印所有可用參數的列表。

圖 3 中的快照顯示了運行在命令行的 Dump Analyzer 的一些輸出:

圖 3. Dump Analyzer 命令行輸出示例

未來計劃

編寫本文時,已經可以使用 Dump Analyzer 的初始版。我們的團隊計劃繼續定期進行修改和更新。尤 其是,我們將側重兩個區域:

DTFJ:Dump Analyzer 的基礎架構

Dump Analyzer 使用 DTFJ 詢問格式化的系統轉儲。DTFJ 是一個 API,它支持構建 Java 診斷工具, 這些工具可以檢查從 VM 中獲取的系統轉儲。檢查系統轉儲之前,jextract 必須首先對其進行處理 以添 加特定於運行時的信息。有必要使用相同版本的 Java 平台針對系統轉儲(命令行上的 jextract core.dmp)運行 jextract,並且在生成該系統轉儲的相同機器上運行。執行該操作之後,便可以在任何 系統上檢查所得到的文件(V1.4 的 Java 平台為 .sdff,V5.0 和更高版本的 Java 平台為 .dmp.zip) 。

使用 DTFJ 進行分析的第一階段是使用適當的圖像工廠構建 DTFJ 圖像。該工廠特定於給定的 VM 級 別並且理解特定平台的轉儲格式。該圖像表示整個操作系統圖像;對於生成系統轉儲的機器,它可以提供 方法來訪問有關該機器的基礎架構的信息, 但是它的主要功能是 能夠檢查圖像內包含的地址空間。使用 DTFJ API,可以從圖像導航到運行時參數、 Java 線程、本機環境以及堆對象的詳細信息。界面允許工具 分析問題並生成報告信息。

我們將不斷改進該工具本身的用戶界面、添加面板以控制轉儲 以及運行轉儲的分析程序、改進輸出格 式、可能添加交互模式以及更多內容。

我們將增加分析程序和腳本的數量以包含更加廣泛的問題。

構建新的分析程序,這一領域非常吸引人。借助此項 DTFJ 轉儲分析技術,您現在便擁有一個非常簡 單的機制,可以檢查低級 VM 條目(如線程和監視器)以便診斷內存不足錯誤、崩潰、死鎖等問題;此外 ,還可以檢查 VM 中出現的任何數據結構的內容。特別是,您可以檢查各種數據結構的內容,它們構成了 運行在 VM 內的應用程序或中間件的實現。我們打算開始構建一個分析程序集合,它將利用這些信息幫助 診斷 WebSphere Application Server 以及可能的其他堆棧產品中的各種問題。

我們的目標是使該工具盡可能有用,因此非常歡迎您提供有關該工具本身以及您希望添加的新分析程 序的反饋。可以通過 ISA 或本文提供反饋。

結束語

本系列的下篇文章將介紹 Extensible Verbose Toolkit。該工具套件通過分析詳細的垃圾收集日志 幫助您調查基於內存的 Java 性能問題。您可以使用該工具查看內存使用模式、確定是否存在內存洩露或 調整垃圾收集配置以提高性能。

在本系列的第四篇文章中您將再次接觸 Dump Analyzer。在該文章中,您將進一步了解該工具的可擴 展性以及如何為其構建自己的分析模塊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved