天天看點

JMAP使用及分析dump檔案

注:内容來源于其他部落客,本文用于記錄,友善大家問題處理

拓展《jvm 性能調優工具之 jmap》:https://www.jianshu.com/p/a4ad53179df3

Linux下導出dump日志

ata]# jmap -dump:format=b,file=/home/dump.out 21

Dumping heap to /home/dump.out …

Heap dump file created

檢視整

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