擴充閱讀
JVM FULL GC 生產問題 I-多執行緒通用實現
JVM FULL GC 生產問題 II-如何定位記憶體洩露? 執行緒通用實現
JVM FULL GC 生產問題 III-多執行緒執行佇列的封裝實現,進一步抽象
jvm-44-jvm 記憶體效能分析工具 Eclipse Memory Analyzer Tool (MAT) / 記憶體分析器 (MAT)
jvm-45-jvm dump 檔案記憶體介紹+獲取方式+堆記憶體可視分析化工具
jvm-46-jvm Thread Dump 執行緒的資訊獲取+可視分析化工具 FastThread
jvm-47-jvm GC 垃圾回收日誌+獲取方式+可視分析化工具 gcviewer
jvisualvm java 效能分析工具
是什麼?
Thread Dump 是記錄 JVM 中所有執行緒的執行狀態(包括堆疊跟蹤)的一種輸出,用於分析執行緒的狀態、死鎖、阻塞等問題。
Thread Dump 是效能分析和故障排查中非常重要的工具,特別是當應用出現效能瓶頸、執行緒死鎖、執行緒阻塞等問題時。
主要內容包括:
- 執行緒狀態:每個執行緒的當前狀態,例如
RUNNABLE
、WAITING
、BLOCKED
等。 - 執行緒堆疊資訊:每個執行緒的呼叫堆疊,包括它當前執行的方法。
- 鎖資訊:如果執行緒正在等待某個鎖,或者持有某個鎖,相關的鎖資訊也會被輸出。
- 死鎖資訊:如果存在死鎖,Thread Dump 會顯示死鎖的執行緒和相關的鎖資訊。
執行緒狀態
- RUNNABLE:執行緒正在執行或在執行佇列中等待排程。
- WAITING:執行緒正在等待某個條件的滿足(例如,等待某個物件的通知)。
- BLOCKED:執行緒正在等待獲取一個鎖,其他執行緒持有該鎖。
- TIMED_WAITING:執行緒在等待特定的時間後自動恢復(例如呼叫
Thread.sleep
)。 - TERMINATED:執行緒已執行完成,處於終止狀態。
如何獲得?
Thread Dump 可以在多種情況下生成,通常用於排查執行緒相關的問題(如死鎖、執行緒阻塞、效能瓶頸等)。
在Java中,生成Thread Dump的方法有幾種:
使用 jstack
工具
jstack
是JDK自帶的工具,用於生成Java程序的Thread Dump。
可以透過以下命令生成Thread Dump:
jstack <pid> > threaddump.txt
使用 jcmd
工具
jcmd
是另一個JDK自帶的工具,可以用來獲取Thread Dump。
透過以下命令生成Thread Dump:
jcmd <pid> Thread.print
區別
二者對比如下:
特性 | jstack | jcmd |
---|---|---|
功能 | 僅獲取執行緒堆疊資訊 | 獲取執行緒堆疊資訊並執行其他JVM管理任務 |
輸出內容 | 簡單的堆疊資訊,執行緒狀態與呼叫堆疊 | 執行緒堆疊資訊,執行緒狀態解釋,鎖資訊等 |
使用方便性 | 簡單,適用於快速檢視堆疊資訊 | 更靈活,支援多種JVM操作和診斷任務 |
命令示例 | jstack <pid> |
jcmd <pid> Thread.print |
附加功能 | 無 | 支援多種操作,如垃圾回收、類載入等 |
如何分析?視覺化工具
以下是一些常用的 Thread Dump 視覺化分析工具
工具名稱 | 特點 | 網址 |
---|---|---|
Thread Dump Analyzer | 簡單易用,支援死鎖和執行緒阻塞分析。 | GitHub |
VisualVM | 功能強大,支援多種 JVM 效能分析。 | VisualVM 官網 |
JStack Viewer | 高亮顯示執行緒狀態和鎖資訊,易用性強。 | GitHub |
Eclim | 專為 Eclipse 提供的外掛,整合環境使用 | GitHub |
Deadlock Detector | 專注於死鎖分析,提供圖形化檢視。 | GitHub |
TDA (Thread Dump Analyzer) | 支援執行緒堆疊視覺化與排序,死鎖檢測。 | GitHub |
jvm-tools Thread Dump Analyzer | 基於 JavaFX,現代介面,支援死鎖分析。 | GitHub |
個人評價:thread 相對比較簡單,平時人工分析的比較多,後續可以嘗試一下這種視覺化工具。VisualVM 倒是看過視覺化的 thread 資訊。
視覺化工具-FastThread
是的,FastThread 是一個非常實用的開源工具,專門用於分析和視覺化 Thread Dump,尤其是針對 Java 應用程式中的多執行緒問題,如死鎖、執行緒阻塞等。它能夠幫助開發人員更高效地分析和理解 Java 執行緒的狀態。
FastThread 的特點:
- 執行緒堆疊分析:解析和分析 Java 應用程式的 Thread Dump,提供清晰的執行緒堆疊和狀態。
- 死鎖檢測:能夠自動檢測死鎖並高亮顯示,幫助開發者快速定位死鎖問題。
- 執行緒狀態圖:透過圖形化介面展示執行緒狀態(如 RUNNABLE、WAITING、BLOCKED),便於直觀分析。
- 支援執行緒堆疊排序:能夠根據不同的標準對執行緒堆疊進行排序,比如按執行緒狀態、執行緒 ID 等。
- 簡單易用:介面簡潔,操作簡單,不需要複雜的配置。
FastThread 的使用:
- Web 線上工具:FastThread 提供了一個方便的線上工具,使用者只需要將 Thread Dump 貼上到網站上,即可自動分析和顯示結果。
- 命令列工具:除了線上工具,FastThread 也提供了命令列工具,可以整合到自動化流程中,支援批次處理 Thread Dump。
FastThread 網站:
-
線上工具:https://fastthread.io
- 使用者可以直接將執行緒轉儲貼上到該網站上,進行分析。
-
GitHub 專案:https://github.com/fastthreadio/fastthread
- 這裡可以找到 FastThread 的原始碼和相關文件。
使用場景:
- 死鎖分析:當遇到執行緒死鎖時,FastThread 能夠自動識別並標記相關執行緒,幫助開發者快速解決問題。
- 執行緒阻塞問題:透過清晰的執行緒狀態展示,幫助分析執行緒阻塞的根源,最佳化多執行緒程式的效能。
- 效能最佳化:對於需要多執行緒最佳化的應用,FastThread 提供了對執行緒狀態的詳細分析,幫助識別效能瓶頸。
總結:
FastThread 是一個非常適合 Java 開發者使用的執行緒分析工具,尤其適用於線上分析 Thread Dump 和解決死鎖、執行緒阻塞等常見的多執行緒問題。
它的開源特性和易用性使它成為開發者在診斷執行緒問題時的一個有力工具。
小結
希望本文對你有所幫助,如果喜歡,歡迎點贊收藏轉發一波。
我是老馬,期待與你的下次相遇。