匯出記憶體映象檔案與記憶體異常分析(MAT工具)
阿新 • • 發佈:2018-11-08
記憶體溢位自動匯出引數:
//發生溢位時dump出來
-XX:+HeapDumpOnOutOfMemoryError
//dump的路徑 ./為專案啟動根路徑
-XX:HeapDumpPath=./
記憶體溢位手動匯出引數:jmap命令使用
jdk安裝後會自帶一些小工具,jmap命令(Java Memory Map)是其中之一。主要用於列印指定Java程序(或核心檔案、遠端除錯伺服器)的共享物件記憶體對映或堆記憶體細節。
jmap命令可以獲得執行中的jvm的堆的快照,從而可以離線分析堆,以檢查記憶體洩漏,檢查一些嚴重影響效能的大物件的建立,檢查系統中什麼物件最多,各種物件所佔記憶體的大小等等。可以使用jmap生成Heap Dump。
關於jamp的命令jdk的官方上很詳細,不贅述了。
注意:jmap的dump 將記憶體使用的詳細情況輸出到檔案
jmap -dump:live,format=b,file=a.log pid //說明:記憶體資訊dump到a.log檔案中
這個命令執行,JVM會將整個heap的資訊dump寫入到一個檔案,heap如果比較大的話,就會導致這個過程比較耗時,並且執行的過程中為了保證dump的資訊是可靠的,所以會暫停應用。
通常做法是:
1)首先配置JVM啟動引數,讓JVM在遇到OutOfMemoryError時自動生成Dump檔案
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path
2)然後使用命令
jmap -dump:format=b,file=/path/heap.bin 程序ID
如果只dump heap中的存活物件,則加上選項-live。
3)然後使用MAT分析工具,如jhat命令,eclipse的mat外掛。
最後在eclipse中安裝MAT外掛(http://www.eclipse.org/mat/), 然後在eclipse中,file---->open,開啟這個檔案heap.bin,利用現成的OOM工具進行分析。 具體操作方法: 首先輸入網址http://www.eclipse.org/mat/previousReleases.php,然後檢視你自己的Eclipse版本, 我的是Indigo的, 所以點選連結“Previous Releases”,選擇Indigo版本的URLhttp://download.eclipse.org/mat/1.1.0/update-site/
用jhat
命令可以參看 jhat -port 5000 heapDump
在瀏覽器中訪問:http://localhost:5000/
檢視詳細資訊