獲取並分析dump文件

本地獲取dump文件:

1、JDK8之前

-XX:PermSize=3m  -XX:MaxPermSize=3m   -XX:+HeapDumpOnOutOfMemoryError

2、JDK8以及之後(沒有永久代了,改成元空間Metaspace了)

-XX:MetaspaceSize=3M -XX:MaxMetaspaceSize=3M   -XX:+HeapDumpOnOutOfMemoryError

執行代碼:

    public static void main(String[] args) {
        List list = new ArrayList();
        int i = 0;
        while(true){
            list.add(String.valueOf(i++).intern());
        }

    }

結果:

objc[54083]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java (0x1067664c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x1087f54e0). One of the two will be used. Which one is undefined.
java.lang.OutOfMemoryError: Metaspace
Dumping heap to java_pid54083.hprof ...
Heap dump file created [1107098 bytes in 0.006 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Metaspace
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:304)
	at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)

線上如何獲取dump文件:

使用jmap -dump:live,format=b,file=xxx [pid],例如:

jmap -dump:live,format=b,file=heap201712.hropf  72947 

 

使用Jprofile分析dump文件

需要先將文件後綴修改爲hprof,用Jprofile可以一目瞭然的看出是大量對象

由於我們設置爲3M,很容易內存溢出

注意:直接內存溢出、棧內存溢出沒有dump文件生成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章