首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

HotSpot VM 深度除錯工具:HSDB 與 CLHSDB 完整操作指南

     編輯:Java 綜合教學

HotSpot VM 深度除錯工具:HSDB 與 CLHSDB 完整操作指南

HSDB(HotSpot Debugger)是專為 HotSpot VM 設計的圖形化除錯工具,對應的命令列版本為 CLHSDB(Command Line HotSpot Debugger)。兩者皆基於 Serviceability Agent (SA) 實作,能在不中斷目標 JVM 的情況下,深度檢視堆、執行緒、類別、物件佈局等內部結構,是 JVM 效能調優與問題診斷的利器。

1. 啟動方式

# 圖形介面 HSDB
java -cp .;%JAVA_HOME%/lib/sa-jdi.jar sun.jvm.hotspot.HSDB

# 命令列介面 CLHSDB
java -cp .;%JAVA_HOME%/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB

注意: 需以與目標 JVM 相同使用者/權限執行,且目標 JVM 需啟用 -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints 以獲得完整功能。

2. HSDB 圖形介面核心功能

連接目標進程

啟動 HSDB 後,選擇 File → Attach to HotSpot process,選取目標 PID 即可連接。

HSDB 連接進程

主要工具列功能

  • Inspector:檢視 OOP (Ordinary Object Pointer) 與 Klass 物件結構,雙擊執行緒名稱亦可開啟
  • Stack Memory:顯示執行緒堆疊記憶體內容(虛擬位址、資料、註解)
  • Show Java Stack Traces:顯示 Java 層堆疊追蹤
  • Show Thread Information:顯示執行緒詳細資訊
  • Find Crashes:偵測崩潰相關資訊

Tools 選單進階工具

工具用途
Class Browser瀏覽已載入類別結構
Code Viewer檢視 JIT 編譯後的機器碼
Compute Reverse Ptrs計算反向指標(誰引用該物件)
Deadlock Detection死鎖偵測
Find Object by Query使用 OQL (Object Query Language) 查詢物件
Find Pointer搜尋指向特定位址的指標
Find Value in Heap在堆中搜尋特定值
Find Value in Code Cache在 Code Cache 中搜尋
Heap Parameters檢視各代堆區位址範圍、大小
Memory Viewer原始記憶體檢視器
Monitor Cache Dump監視器快取資訊
Object Histogram物件類型統計直方圖
Show System Properties顯示系統屬性
Show VM Version顯示 VM 版本資訊
Show –XX flags顯示 VM 啟動參數

HSDB Heap Parameters

3. CLHSDB 命令列常用指令

在 HSDB 中選 Windows → Console 或直接啟動 CLHSDB 進入命令列模式。

指令說明
attach <pid> | <core>連接 Java 進程或 core dump 檔案
class <name>檢視類別詳細資訊
classes列出所有已載入類別
detach斷開連接
inspect <expr>檢視 OOP 物件結構
jstack [-v]印出所有執行緒堆疊(-v 顯示詳細)
mem <addr> [len]檢視指定位址記憶體內容
print <expr>評估並印出運算式值
revptrs <addr>計算反向指標
scanoops <start> <end> [type]掃描指定位址範圍內的物件實例
thread {-a | <id>}檢視指定/所有執行緒資訊
threads列出所有執行緒摘要
universe顯示堆空間總覽
whatis <addr>查詢指定位址儲存的資料類型
quit退出 CLHSDB

4. 實戰場景

  • 記憶體洩漏分析:使用 Object Histogram 或 OQL 查找可疑物件保留路徑
  • 死鎖排查:Deadlock Detection 或 jstack 找出持有鎖的執行緒
  • JIT 編譯問題:Code Viewer 檢視熱點方法編譯代碼
  • Off-heap 記憶體追蹤:Memory Viewer、Find Value in Heap 定位直接記憶體分配

透過 HSDB/CLHSDB 可直觀理解 JVM 內部運作機制,是高階 Java 工程師必備的診斷技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved