1. 程式人生 > >使用JMAP dump及分析dump文件

使用JMAP dump及分析dump文件

entry 使用權 對象 lang jmap 如果 str OS unable

查看整個JVM內存狀態
jmap -heap [pid]
要註意的是在使用CMS GC 情況下,jmap -heap的執行有可能會導致JAVA 進程掛起

查看JVM堆中對象詳細占用情況
jmap -histo [pid]

只打印活躍對象 jmap -histo[:live] <pid>

導出整個JVM 中內存信息

dump堆 當OLD區域占用大於90%的時候dump下來用MemoryAnalyzer分析

jmap -dump:live,format=b,file=tai.dump pid
jmap -dump:live,format=b,file=tai.dump 16733

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的使用權.


查看Pid 文件

/proc/18225/status or io 信息

使用JMAP dump及分析dump文件