天天看點

檢視 JVM 記憶體的幾個工具,建議收藏!

檢視 JVM 記憶體的幾個工具,建議收藏!

列印堆的使用情況:

jmap -heap <pid>
檢視 JVM 記憶體的幾個工具,建議收藏!

那麼,從這個輸出中我們也可以大緻看出堆的結構,分為Young Generation (年輕代) 和 Old Generation (老年代)

Young Generation又被劃分為:Eden Space , From Space 和 To Space

可以看到這裡To區是幹淨的,還未被使用,From區已經使用了95%了 

列印類的執行個體數量、占用的記憶體、類的名稱,通常我們并不需要看所有的,隻需要看前幾條即可:

jmap -histo[:live] <pid>  

檢視 JVM 記憶體的幾個工具,建議收藏!

以hprof二進制格式dump堆的使用情況(PS:相當于生成一個快照,後續我們可以對這個快照檔案進行分析):

jmap -dump:live,format=b,file=heap.bin <pid>  

檢視 JVM 記憶體的幾個工具,建議收藏!

另外,關注公衆号Java技術棧,在背景回複:JVM46,可以擷取一份 46 頁的 JVM 教程,非常齊全。

Memory Analyzer (MAT)

檔案dump下來以後,可以使用Eclipse的MAT插件進行檢視
如果日常開發用的是eclipse的話,可以直接安裝這個插件,如果不是的話,這個插件也可以獨立運作
https://www.eclipse.org/mat/
https://www.eclipse.org/mat/downloads.php
解壓之後輕按兩下MemoryAnalyzer.exe即可運作
檢視 JVM 記憶體的幾個工具,建議收藏!
打開剛才的heap.bin檔案
檢視 JVM 記憶體的幾個工具,建議收藏!
檢視 JVM 記憶體的幾個工具,建議收藏!
可以看到下面有三個頁籤,包括可以執行的操作和報表
先看第一個Histogram
檢視 JVM 記憶體的幾個工具,建議收藏!
由于這裡是随便運作的一個工程,并沒有出現記憶體洩漏之類的問題,是以這裡看到的都是一些基礎的java類
檢視引用
檢視 JVM 記憶體的幾個工具,建議收藏!
Dominator Tree 可以看到biggest object以及它們所占記憶體的比例
檢視 JVM 記憶體的幾個工具,建議收藏!

我們一級一級的找,可以找到源檔案,然後分析代碼,最終定位到問題之根源

jconsole

可以檢視本地的程序,也可以檢視遠端主機上的程序

檢視 JVM 記憶體的幾個工具,建議收藏!

例如:jconsole 192.168.102.16:9105

檢視 JVM 記憶體的幾個工具,建議收藏!
檢視 JVM 記憶體的幾個工具,建議收藏!

或者本地

檢視 JVM 記憶體的幾個工具,建議收藏!

其它

檢視 JVM 記憶體的幾個工具,建議收藏!

繼續閱讀