轉自:https://blog.csdn.net/jijianshuai/article/details/79128033html
Heap Dump的格式有不少種,並且不一樣的格式包含的信息也可能不同。但總的來講,Heap Dump通常都包含了一個堆中的Java Objects, Class等基本信息。同時,當你在執行一個轉儲操做時,每每會觸發一次GC,因此你轉儲獲得的文件裏包含的信息一般是有效的內容(包含比較少,或沒有垃圾對象了) 。java
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html#BABEHABG
oracle
jmap -dump:live,format=b,file=d:\dump\heap.hprof "pid"jvm
jcmd "pid" GC.heap_dump d:\dump\heap.hprofide
3.1 XX:+HeapDumpOnOutOfMemoryError工具
當OutOfMemoryError發生時自動生成 Heap Dump 文件。ui
這但是一個很是有用的參數,由於當你須要分析Java內存使用狀況時,每每是在OOM(OutOfMemoryError)發生時。.net
3.2 -XX:+HeapDumpBeforeFullGC線程
當 JVM 執行 FullGC 前執行 dump。orm
3.3 -XX:+HeapDumpAfterFullGC
當 JVM 執行 FullGC 後執行 dump。
3.4 -XX:+HeapDumpOnCtrlBreak
交互式獲取dump。在控制檯按下快捷鍵Ctrl + Break時,JVM就會轉存一下堆快照。
3.5 -XX:HeapDumpPath=d:\test.hprof
指定 dump 文件存儲路徑。
注意:JVM 生成 Heap Dump 的時候,虛擬機是暫停一切服務的。若是是線上系統執行 Heap Dump 時須要注意。
分析 Heap Dump 的工具均可以獲取 Heap Dump 文件。 好比:jdk 自帶的工具 jvisualvm。 其它工具:Eclipse memory analyzer(jmat)、JProfiler 等。