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視圖

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容