JVM監控及診斷工具

命令行工具

  • jps   jps類似於linux中的ps命令,用於打印正在運行的java進程相關的信息。主要參數有: 1)-l 打印模塊名以及包名 2)-v 打印傳給JVM的參數 3)-m打印傳給main方法的參數
  • jstat   用於打印JVM進程的性能數據,主要用來查看JVM gc相關的數據。實際中用法如下圖:

jstat用法 其中-gc可以換成-class 、-gcnew、-gcold等參數;而54992表示的JVM的進程id(可能通過上面的jps命令查看) ;4s表求每4秒打印一次,後面的3表求共打印三次。 打印的各參數含義如下: 1:S0C、S1C、S0U、S1U:Survivor 0/1區容量(Capacity)和使用量(Used) 2:EC、EU:Eden區容量和使用量 3:OC、OU:年老代容量和使用量 4:MC、MU:元數據區容量和使用量 5:CCSC、CCSU:壓縮類空間容量和使用量 5:YGC、YGT:年輕代GC次數和GC耗時 6:FGC、FGCT:Full GC次數和Full GC耗時 7:GCT:GC總耗時 jstat可以用來判斷系統是否出現了內存泄漏,方法是通過一短長時間的觀察OU的增長情況,如果OU穩定增長,則有可能出現內存泄漏。

  • jmap   jmap用於分析JVM中堆中的對象,包括生成堆的dump文件,這個命令同樣有多條子命令。常用的命令有如下幾個: 1:jmap -heap:用於打印堆內存使用情況,包括使用的GC算法、堆配置參數和各代中堆內存使用,示例如下圖所示:

jmap -heap使用示例 2:jmap -histo:live:用於打印堆中各個類中的實例數目以及佔用內存的大小,並排序。使用的示例如下:

jmap -histo:live使用示例 3:jmap -dump :用於導出JVM的堆快照文件,方便用GUI工具分析。

jmap -dump使用示例 4:jmap -finalizerinfo:打印所有待 finalize 的對象。

jmap -finalizerinfo使用示例 注意:jmap依賴於 Java 虛擬機的Attach API,因此只能監控本地的java進程。一旦開啓 Java 虛擬機參數DisableAttachMechanism(即使用參數-XX:+DisableAttachMechanism),基於 Attach API 的命令將無法執行。

  • jinfo   jinfo命令可用來查看目標 Java 進程的參數,如傳遞給 Java 虛擬機的-X(即輸出中的 jvm_args)、-XX參數(即輸出中的 VM Flags),以及可在 Java 層面通過System.getProperty獲取的-D參數(即輸出中的 System Properties)。
  • jstack   jstack:主要用來查看某個Java進程內的線程堆棧信息,而用可以用於發現死鎖。有如下兩個參數: 1:-l (long listings)會打印出額外的鎖信息,在發生死鎖時可以用jstack -l pid來觀察鎖持有情況。 2: -m (mixed mode),不僅會輸出Java堆棧信息,還會輸出C/C++堆棧信息(比如Native方法) 如果線程數太多,可以藉助分析操作系統特用的分析工具找出用時最長的線程,然後通過如下圖的命令定位到具體的堆棧信息:

linux系統上可以通過top -Hp pid找出佔用時間最多的線程,這裏的線程號需要轉成16進制。

GUI工具

Eclipse MAT

官網地址 http://www.eclipse.org/mat/downloads.php,下載最新的包,解壓放到eclipse的dropins目錄下,重啓eclipse便可以使用MAT工具分析堆內存了。Memory Analysis視圖的打開方工如下圖:

Memory Analysis

MAT 計算對象佔據內存的兩種方式。第一種是 Shallow heap,指的是對象自身所佔據的內存。第二種是** Retained heap,指的是當對象不再被引用時,垃圾回收器所能回收的總內存**,包括對象自身所佔據的內存,以及僅能夠通過該對象引用到的其他對象所佔據的內存。如下圖所示:

shallow Heap與 Retained Heap

MAT還有一個重要的視圖便是dominator tree(支配樹), 視圖裏是將堆中的所有對象看成一張圖,每個對象是一個圖節點,而 GC Roots 則是對象圖的入口,對象之間的引用關係則構成了對象圖中的有向邊。這樣一來,便能夠構造出該對象圖所對應的支配樹。如下圖所示:

dominator_tree視圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章