生成heap dump


  在查看內存泄露以及對內存問題中,要dump出當前內存堆存儲快照,便於分析。有幾種方法可以做,簡介如下

一、intellij IDEA

  由於我用的是intellij IDEA,所以沒有介紹Eclipse的配置,當然網上有很多種。

1、run->EditConfigurations

 

2、配置VM options,這里設置為JVM在遇到OOM(OutOfMemoryError)時生成Dump文件,-XX:+HeapDumpOnOutOfMemoryError  ,當然也可以設置dump出的文件路徑-XX:HeapDumpPath=.../dump。同時這里我設置了限制堆的大小為20M,且不可擴展。

3、運行你的程序,便會生成heap文件,自動命名格式如:java_pid128.hprof

二、使用jmap工具                                                          

  jmap是jdk安裝時自帶的dump工具,但是使用時,要知道java程序的pid,使用格式為:

jmap -dump:file=D:\temp\heapdumps\dump.bin 1234

三、直接在程序中使用jmap                                              

  在程序中,為了獲取我們需要引入 java.lang.management.ManagementFactory包.

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by pc on 14-11-25.
 */
public class HeapOOM {
    static class OOMObject{

    }
    public static void main(String [] args){
        String name = ManagementFactory.getRuntimeMXBean().getName();
        String pid = name.substring(0, name.indexOf("@"));
        String[] cmd = { "jmap ", "-dump:file=E:\\code\\src\\Java\\jvm\\heap\\dump\\dump1.bin", pid };
        try {
            Process p = Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
        List<OOMObject> list=new ArrayList<OOMObject>();
        while(true){
            list.add(new OOMObject());
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM