首页 > 编程知识 正文

java oom排查思路,oom文件打不开

时间:2023-05-06 17:02:59 阅读:56625 作者:1718

1 .导致oom的代码

Java堆用于存储对象实例。 如果不断创建对象,并确保GC Roots到对象的可用路径,从而避免垃圾回收机制清除这些对象,则在对象数达到最大堆容量限制后会发生内存溢出异常

import java.util.ArrayList;

import java.util.List; publicclassoomtest { publicstaticvoidmain (字符串[ ] args ) {int i=0;

try {

字符串s=' hello ';

列表列表=new ArrayList (; while (真)。

list.add(s;

s=s s;

I;

}

} catch (可移植e ) {

e .打印堆栈跟踪(;

system.out.println(I;

}

}

}

2 .故障排除过程

1. javac OOMTest.java

说明:编译class文件

2.Java-xmx 102 m-xms 102 m-xx : heapdumponoutofmemoryerror-xx : heap dump path=e :/memory.hprofomtest

说明:

-Xmx102m -Xms102m设置堆内存的最大值,最小值为102m

- xx : heapdumponoutofmemoryerror是在dddxt发生OOM时导出您的堆快照信息

-XX:HeapDumpPath设置导出的路径

3. jvisualvm

这个可以在命令行上敲,也可以在Jdk包下找

打开我们的VisualVM虚拟机

导入我们的hprof文件后,可以看到对应的信息

在这里,你可以看到我们的String所占的比例很大

List也包含字符串数据,而且根据错误的行数,判断哪里出了问题并不容易

总结:

1.dump给出我们堆的快照信息

利用JVisualVM,判断哪里出了问题

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。