1. 程式人生 > >MAT(Memory Analyzer tool)使用

MAT(Memory Analyzer tool)使用

模擬 index st2 -c mx2 ID www. ray 執行

當線上環境出現OOM/內存泄漏了,怎麽辦?

讓虛擬機在發生內存溢出時 Dump 出當前的內存堆轉儲快照,配置-XX:+HeapDumpOnOutOfMemoryError,

當出現OOM時,分析dump下來的hprof文件,一般使用MAT輔助查看。

安裝方式:

1 eclipse安裝MAT插件;安裝說明:https://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html

2 獨立版本(建議),下載地址:http://www.eclipse.org/mat/downloads.php,下載解壓後就可以直接用。

技術分享圖片

分析一個堆轉儲文件需要消耗堆空間,需要分配內存,

MemoryAnalyzer.ini中的參數一般默認為-vmargs– Xmx1024m;

當dump文件的大小大於配置的1024m,會報錯;

方式1:修改啟動參數 MemoryAnalyzer.exe-vmargs -Xmx4g

方式2:編輯文件 MemoryAnalyzer.ini,修改/添加參數 -vmargs– Xmx4g

模擬產生hprof文件:

public class OOMTest {
    public static void main(String[] args) {
        List<Person> list1 = new ArrayList<>();
        for (Long i = 0L; i < 1000L; i++) {
            list1.add(new Person(i, i.toString(), i.toString()));
        }

        List<Shop> list2 = new ArrayList<>();
        for (long i = 0L; i < 256L * 1024L * 1024L; i++) {
            list2.add(new Shop(i));
        }
    }

    static class Person {
        private Long id;
        private String name;
        private String idcard;

        public Person(Long id, String name, String idcard) {
            this.id = id;
            this.name = name;
            this.idcard = idcard;
        }
    }
}

  

修改相關參數,這裏加上了 -XX:+HeapDumpOnOutOfMemoryError -Xmx256M

技術分享圖片

執行後:

技術分享圖片

dump下來的hrof文件在項目工程目錄下。

打開MAT工具,File >> Open Heap Dump...

技術分享圖片

通過分析結果,很容易知道哪些對象占用了大量的堆內存。

MAT會把分析結果打包成zip包,解壓後通過瀏覽器就可以訪問。

技術分享圖片

打開對象依賴關系樹形視圖

技術分享圖片

相關鏈接:

http://seanhe.iteye.com/blog/898277

http://www.blogjava.net/rosen/archive/2010/06/13/323522.html

https://blog.csdn.net/rachel_luo/article/details/8992461

MAT(Memory Analyzer tool)使用