內存溢出自動導出參數:
//發生溢出時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/
查看詳細信息