JVM基礎故障處理工具總結

JVM基礎故障處理工具

1. jps:虛擬機進程狀況工具

jps 工具的功能是列出正在運行的虛擬機進程,並顯示虛擬機執行主類的名稱以及這些進程的本地虛擬機唯一 ID。

jps 命令格式如下:

$jps [option] [hostid]

image-20220125153118750

2. jstat:虛擬機統計資訊監視工具

jstat 是用於監視虛擬機各種運行狀態的命令行工具,可以顯示虛擬機進程中類載入、記憶體、垃圾收集、即時編譯等運行時數據。

jstat 命令格式如下:

$jstat [ option vmid [interval[s|ms] [count] ] ]

參數intervalcount代表查詢間隔和次數,如果忽略這兩個參數說明只查詢一次。

選項option代表用戶希望查詢的虛擬機資訊,主要分為三類:類載入、垃圾收集、運行期編譯狀況。

image-20220125153803409

下面給出一個例子:
image-20220125153839802

查詢結果表明:

  • 新生代 Eden 區使用了 6.2% 的空間
  • 兩個 Survivor 區都是空的
  • 老年代 O 使用了 41.42% 的空間
  • 永久代 P 使用了 47.20% 的空間
  • 程式運行以來發生 Young GC 16 次,共耗時 0.105s
  • 發生 Full GC 3 次,共耗時 0.472s
  • 所有 GC 總耗時 0.577s

3. jinfo:Java配置資訊工具

jinfo 的作用是實時查看和調整虛擬機各項參數。

jinfo 命令格式如下:

$jinfo [option] pid

下面是一個執行樣例:

image-20220125154603272

4. jmap:Java記憶體映像工具

jmap 命令用於生成堆轉儲快照。還可以查詢 finalize 執行隊列、Java 堆和方法區的詳細資訊,如空間使用率,當前使用的收集器版本等等。

另外,通過虛擬機的XX: +HeapDumpOnOutOfMemoryError參數,可以讓虛擬機在記憶體溢出之後自動生成堆轉儲快照。

jmap 命令格式如下:

$jmap [option] vmid

image-20220125154827703

下面是一個使用樣例:

image-20220125154851542

5. jhat:虛擬機堆轉儲快照分析工具

jhat 與 jmap 工具搭配使用,用於分析 jmap 產生的堆轉儲快照。。

jhat 內置了一個微型地 HTTP 伺服器,可以在瀏覽器中查看堆轉儲快照的分析結果。

但由於性能較差、功能較為簡陋,往往使用 VisualVM 代替這個工具。

6. jstack:Java堆棧跟蹤工具

jstack 引用書工程虛擬機當前的執行緒快照。執行緒快照是虛擬機內每一條執行緒正在執行的方法堆棧的集合,生成執行緒快照的目的通常是定位執行緒出現長時間停頓的原因,如死鎖、死循環等。

jstack 命令格式如下:

$jstack [option] vmid

image-20220125203343358

下面是一個使用樣例:

image-20220125203416844

JDK5 開始,Thread類新增了一個getAllStackTraces()方法,可以獲取虛擬機中所有執行緒的StackTraceElement對象,可以通過簡單的幾行程式碼完成 jstack 的大部分功能。

Tags: