使用jmap命令(用於輸出對象,適用於解決對象內存溢出等問題)導出內存映象文件與堆內存異常分析 MAT

內存溢出自動導出參數:

//發生溢出時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=heap.bin 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/ 查看詳細信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章