JVM系列:Dump文件的生成和分析

概括

Dump包分析是JVM問題排查的殺手锏啦,直接定位到大對象所在的類,為問題排查提供最直接的指導(dǎo)

Dump文件的生成

  1. jmap命令生成: jmap -dump:live,file=dump_001.bin PID
  2. 監(jiān)控工具生成:jvisualvm 工具里面有 Heap Dump的功能
  3. jvm參數(shù)的配置: 比如FullGC的時候生成dump包
  • HeapDumpBeforeFullGC :實(shí)現(xiàn)在Full GC前dump。
  • HeapDumpAfterFullGC :實(shí)現(xiàn)在Full GC后dump。
  • HeapDumpPath :設(shè)置Dump保存的路徑
Java ... -XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC -XX:HeapDumpPath=e:\dump testgc.Main

Dump文件的jvisualvm分析

測試代碼:制造一個大的HashMap對象

public class TestMain {
     //聲明緩存對象
    private static final Map map = new HashMap();
    public static void main(String args[]){
        try {
            Thread.sleep(10000);//給打開visualvm時間
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //循環(huán)添加對象到緩存
        for(int i=0; i<4000000;i++){
            TestMemory t = new TestMemory();
            map.put("key"+i,t);
        }
        try {
            Thread.sleep(Integer.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("qqqq");
    }

}
class TestMemory{
    public  String name="huangzs";
    public  String address="huangzs_jiujiangshi_jiangxisheng";
}

先把Dump文件導(dǎo)入到j(luò)visualvm中

  1. 根據(jù)size進(jìn)行排序,查看大的對象
  2. 根據(jù)size/百分比得到當(dāng)前 堆區(qū)的大小
  3. 當(dāng)前最大的對象:multiThread.TestMain ,也就是 multiThread包下的TestMain這個類,占了19%堆的大小
  4. 堆中對象占用空間最大的對象類型是 java.util.HashMap$Entry,也就是HashMap有很多的Entry
  5. 最大的java.util.HashMap編號是 174


    image

大對象分析

  1. 對象編號174 ,占用空間 67108888b % (1024*1024)=64M
  2. 這個對象是被 TestMain這個類的 map這個屬性引用的
  3. 另外左邊的小框框的右上角 提供按照 size排序的功能


    image

喜歡要點(diǎn)贊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容