天天看點

dump java_[Java基礎] 使用JMAP dump及分析dump檔案

http://zhumeng8337797.blog.163.com/blog/static/100768914201242410583187/

其中jmap是java自帶的工具

檢視整個JVM記憶體狀态

jmap -heap [pid]

要注意的是在使用CMS GC 情況下,jmap -heap的執行有可能會導緻JAVA 程序挂起

檢視JVM堆中對象詳細占用情況

jmap -histo [pid]

導出整個JVM 中記憶體資訊

jmap -dump:format=b,file=檔案名 [pid]

jhat是sun 1.6及以上版本中自帶的一個用于分析JVM 堆DUMP 檔案的工具,基于此工具可分析JVM HEAP 中對象的記憶體占用情況

jhat -J-Xmx1024M [file]

執行後等待console 中輸入start HTTP server on port 7000 即可使用浏覽器通路 IP:7000

eclipse Memory Analyzer

Eclipse 提供的一個用于分析JVM 堆Dump檔案的插件。借助這個插件可檢視對象的記憶體占用狀況,引用關系,分析記憶體洩露等。

http://www.eclipse.org/mat/

kill -3 [pid]

在Linux 上找到Java所在的程序号,然後執行以上指令,線程的相關資訊就輸出到console

jstack

jstack 是sun JDK 自帶的工具,通過該工具可以看到JVM 中線程的運作狀況,包括鎖等待,線程是否在運作

執行 jstack [pid] ,線程的所有堆棧資訊

"http-8080-10" daemon prio=10 tid=x0a949bb60 nid=0x884  waiting for monitor entry [...]

"http-8080-10" 這個線程處于等待狀态。 waiting for monitor entry 如果在連續幾次輸出線程堆棧資訊都存在于同一個或多個線程上時,則說明系統中有鎖競争激烈,死鎖,或鎖餓死的想象。

“http-8080-11” daemon prio=10 tix=xxx nid=xxx in object.wait() [...]

java.lang.Thread.State:waiting (on object monitor)

該表示http-8080-11的線程處于對象的Wait 上,等待其他線程的喚醒,這也是線程池的常見用法。

“Low Memory Detector”daemon prio=10 tix=xx nid=xxx runnable [...] java.lang.Thread.State:runnable

表示“Low Memory Detector” 的線程處于Runable狀态,等待擷取CPU的使用權.

jvisualvm

一.Java VisualVM 概述

對于使用指令行遠端監控jvm 太麻煩 。 在jdk1.6 中 Oracle 提供了一個新的可視化的。 JVM 監控工具 Java VisualVM 。jvisualvm.exe 在JDK 的 bin 目錄下。

輕按兩下啟動 Java VisualVM 後可以看到視窗左側 “應用程式 ”欄中有“ 本地 ”、“遠端 ” 、“快照 ”三個項目。

“本地 ”下顯示的是在 localhost 運作的 Java 程式的資源占用情況,如果本地有 Java 程式在運作的話啟動 Java VisualVM 即可看到相應的程式名,點選程式名打開相應的資源監控菜單,以圖形的形式列出程式所占用的 CPU 、 Heap 、 PermGen 、類、線程的 統計資訊。

“遠端” 項下列出的遠端主機上的 Java 程式的資源占用情況,但需要在遠端主機上運作 jstatd 守護程式

dump java_[Java基礎] 使用JMAP dump及分析dump檔案

VisualVM分為 3 類, 本地 它會自動偵測到,并顯示出來

輕按兩下Local 下的任一節點,看到右邊的變化 ,你可以監控 CPU ,記憶體,類,線程等運作狀況,實時監控伺服器性能。

dump java_[Java基礎] 使用JMAP dump及分析dump檔案

右鍵 VisualVM我們可以看到 Thread Dump, Heap Dump

做 Thread Dump 很快,馬上就可以看到結果

dump java_[Java基礎] 使用JMAP dump及分析dump檔案

Heap Dump要稍花費一些時間(可以看到目前 heap 裡對象的數量及占用的比例,做 OOM 很好用)

dump java_[Java基礎] 使用JMAP dump及分析dump檔案

對其功能不再做描述,可以查閱網上相關品質,我們主要講的是如何使用 VisualVM 遠端監控。