IBM Dump Analyzer 建立於 Diagnostic Tooling Framework for Java (DTFJ) 之上,核心設計為可擴展分析模組架構。每個模組專責分析系統轉儲特定面向,協助診斷特定問題類型。本文逐步說明開發、部署、執行自訂分析模組完整流程。
AnalysisModule,勾選分離原始碼與類別檔目錄。dumpAnalyzer.jardtfj-interface.jardtfj.jar (Java 5.0+,位於 j9 目錄)dtfj.jar (Java 1.4.2,位於 sov 目錄)mypackage 撰寫模組程式碼。適用「判斷特定條件」場景(如:是否多處理器、是否死鎖、是否 WebSphere 轉儲)。需實作:
getShortDescription():模組簡述。doAnalysis():回傳名稱/值對陣列,供規則引擎評估。範例:DWAnalyze 檢查處理器數量 > 1。
public String[] doAnalysis() {
return checkProcessors(getContext().getCurrentImage());
}
private String[] checkProcessors(Image image) {
try {
int procNum = image.getProcessorCount();
return new String[] {"processorCount=" + procNum};
} catch (DTFJException e) { handleError(...); }
}
建構子中 defineRule("isMultiProcessor", new String[]{"processorCount > 1 TRUE"}) 定義規則,引擎自動評估真假。
適用「輸出詳細資訊」場景(如:列出所有執行緒堆疊、系統類型)。需實作:
getShortDescription()produceReport():回傳 IAnalysisReport 物件,封裝格式化輸出內容。範例:DWReport 輸出建立轉儲的系統類型。
public IAnalysisReport produceReport() {
IAnalysisReport ret = allocateReport();
Image img = ((AnalyzerContext)getContext()).getCurrentImage();
ret.printLiteral("Image created on " + img.getSystemType());
return ret;
}
提供 IAnalyzerBase 預設實作、規則引擎、錯誤處理、報告配置等實用方法,建議繼承而非直接實作介面。
Run Configurations:Main Class 設 com.ibm.dtfj.analyzer.base.DumpAnalyzer,Bootstrap Entries 加入 3 個 DTFJ JAR,Program Arguments 傳入轉儲完整路徑 [+ 分析器類別名/腳本路徑]。
analyzers.jar。set BCP=j9/dtfj.jar;j9/dtfj-interface.jar;sov/dtfj.jar java -cp dumpAnalyzer.jar;analyzers.jar -Xbootclasspath/p:%BCP% com.ibm.dtfj.analyzer.base.DumpAnalyzer<分析器類別名>
analyzers.jar 替換 ISA plugins 目錄下同名檔。mypackage.DWAnalyze)。SML 以狀態機概念控制分析流程,關鍵字:import、state、變數指派 {var} = {analyzer}:{rule}、if/else/fi、newState、report、print、error、terminate。副檔名 .sml。
script.sml:import mypackage.DWAnalyze import mypackage.DWReport state start multi = DWAnalyze:isMultiProcessor if (multi = true) print DWAnalyze detected a multiprocessor dump else print DWAnalyze did not detect find a multiprocessor dump fi report DWReport terminate ok
-scriptDir:<目錄> script.sml。| 介面/類別 | 用途 |
|---|---|
IAnalyzerBase | 所有分析器基礎屬性:名稱、版本、描述、上下文管理 |
IAnalyze | 結論分析:doAnalysis/analyzeResponse/produceReport/listRules |
IReport | 報告產出:produceReport |
AnalyzerBase | 抽象基底類,提供預設實作與工具方法 |
IAnalyzerContext | 執行時上下文:取得 JavaRuntime、載入其他分析器、輸出訊息、進度通知 |
IAnalysisReport | 報告格式化:startSection/printField/printLiteral/printReport/endSection |
Image:整個轉儲,含 ImageAddressSpace、ImageProcess、ImageModule、ImageThread、ImageRegister、ImagePointer。ManagedRuntime → JavaRuntime:JVM 執行時,可迭代 JavaClassLoader、JavaThread、JavaMonitor、JavaHeap、JIT 編譯方法。JavaClassLoader → 類別定義 → 方法/欄位;JavaHeap → 所有物件 → 欄位值。DTFJIterator / DTFJSortedIterator:自動處理損壞物件、支援排序迭代。SimpleVector:簡化陣列操作。ObjectFinder / ClassFinder:快取掃描結果,避免重複遍歷。ObjectNavigatorCollection / ObjectNavigator:封裝物件實例存取欄位路徑。VectorWrapper、HashMapWrapper、PropertiesWrapper、ThreadLocalWrapper 解析標準集合內容。掌握 DTFJ 模型與分析模組開發流程,即可建構專屬診斷工具解決特定問題。本系列四文涵蓋 Dump Analyzer、EVTK、Lock Analyzer、自訂擴展,完整構建 Java 診斷技能樹,助您提升應用程式穩定度與效能。