擴充閱讀
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 效能分析工具
場景
JVM DUMP 檔案應該如何分析?
MAT 是什麼?
Eclipse Memory Analyzer Tool (MAT) 是一個強大的 Java 堆記憶體分析工具,常用於分析 Java 記憶體轉儲(heap dump),幫助開發者找到記憶體洩漏、檢查大物件等問題。以下是對 MAT 的詳細介紹,包括其核心功能、使用場景以及分析步驟。
1. MAT 的核心功能
- 查詢記憶體洩漏:MAT 透過分析 heap dump,可以幫助發現潛在的記憶體洩漏點,特別是無法被垃圾回收的物件。
- 識別大物件:MAT 可以快速識別佔用大量記憶體的物件及其引用路徑,幫助最佳化應用程式的記憶體使用。
- 分析物件保留集:透過計算每個物件的保留大小(retained size),MAT 可以幫助確定哪些物件或物件樹最為消耗記憶體。
- 生成報告:MAT 可以自動生成問題分析報告,給出可能的記憶體洩漏或物件過大等問題的總結,並提供詳細的建議。
2. 常見使用場景
- 記憶體洩漏排查:在應用程式出現 OutOfMemoryError 錯誤或記憶體消耗異常時,MAT 是分析堆轉儲、查詢洩漏原因的利器。
- 最佳化記憶體使用:MAT 能幫助你識別記憶體使用的熱點物件,幫助改進程式碼以減少記憶體消耗。
- 分析應用的生命週期記憶體模式:瞭解應用程式的記憶體分配情況,幫助開發者最佳化物件的生命週期管理,避免記憶體問題。
- 除錯記憶體洩漏測試:在模擬壓力測試或效能測試時,可以生成 heap dump 並使用 MAT 來確定記憶體使用的瓶頸。
下載
2024 年 5 月 8 日,Memory Analyzer 遷移至 Github
Memory Analyzer 的程式碼庫已從 Eclipse Git 伺服器遷移至 Github:https://github.com/eclipse-mat/mat。
MAT vs JVisualVM
個人比較喜歡實用 mat,非常直觀強大。
功能 | MAT | JVisualVM |
---|---|---|
實時監控 | 不支援實時監控,只分析堆轉儲 | 支援實時監控 JVM 效能,包括 CPU、記憶體、執行緒、GC 活動等 |
堆轉儲分析 | 強大的堆轉儲分析能力,支援深入分析 | 支援堆轉儲分析,但功能不如 MAT 詳細 |
記憶體洩漏檢測 | 自動生成記憶體洩漏嫌疑報告,提供深入的保留集分析 | 提供基礎的記憶體洩漏分析 |
執行緒分析 | 不支援執行緒分析 | 支援實時執行緒分析和執行緒 dump |
GC 分析 | 不支援 GC 分析 | 提供基本的 GC 活動監控 |
物件引用鏈分析 | 支援詳細的物件引用鏈分析、保留大小等 | 提供基本的物件引用分析 |
OQL 查詢 | 支援 OQL(Object Query Language) | 不支援 OQL |
效能調優 | 不適合效能調優,專注於記憶體分析 | 支援實時效能調優 |