IBM Java 運行時提供跟蹤引擎(連續低開銷歷史記錄)、轉儲引擎(事件驅動多類型快照)、DTFJ API(平台無關轉儲分析介面),構建完整診斷閉環。
minimal:僅標識符+時間戳 → 內存環形緩衝(每線程獨立,無鎖衝突)。maximal:含關聯數據 → 內存緩衝。print/iprint:輸出至 stderr(後者帶縮進)。external:JVMRI 監聽器。exception:異常專用緩衝。-Xtrace、屬性文件、com.ibm.jvm.Trace API、JVMRI 均可控制。-Xtrace:print=mt,methods={*.*,!java/lang/*.*} 排除系類,定位參數傳遞錯誤與競態。suspend/resume/sysdump/javadump/heapdump/snap。例:-Xtrace:trigger=method{java/lang/StackOverflowError*,sysdump} 首次遇到堆棧溢出即產生系統轉儲。-verbose:gc 子集永不丟失。java:Java 轉儲(環境、鎖、線程棧、類信息)。heap:堆轉儲(對象大小與引用),PHD 格式。snap:跟蹤緩衝寫文件。system:OS 原生核心轉儲(core/minidump)。tool:調用外部命令(如自動跑 JExtract)。事件:gpf、user、vmstart/stop、load/unload、throw/catch/uncaught、thrstart/stop、blocked、fullgc。
過濾器可針對異常類名、類名等精細匹配。默認配置(-Xdump:what)已覆蓋常見故障場景,可通過 -Xdump:java:events=uncaught,filter=java/net/SocketException 動態增刪。
系統轉儲 → JExtract 產生 XML 索引 → DTFJ 結合兩者提供分層對象模型:Image → ImageAddressSpace → ImageProcess → JavaRuntime → 堆/線程/類/對象/方法/字段……
Image img = new ImageFactory().getImage(new File("core.dmp"));
ImageProcess proc = (ImageProcess) img.getAddressSpaces().next().getCurrentProcess();
JavaRuntime rt = (JavaRuntime) proc.getRuntimes().next();
Map<String,Long> cnt = new HashMap<>();
for (JavaHeap heap : rt.getHeaps())
for (JavaObject obj : heap.getObjects())
cnt.merge(obj.getJavaClass().getName(), 1L, Long::sum);
同理可掃描線程棧、鎖持有情況、編譯代碼、本機庫列表等,構建自定義診斷工具。
verbose:gc 圖形化分析 + 調優建議 + 記憶體洩漏檢測。