获取并分析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文件生成

发布了142 篇原创文章 · 获赞 345 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/zhengchao1991/article/details/88135691