在一个项目中,突然出现了OOM故障,那么该如何排除-研究为什么出错-
能够看到代码第几行出错:内存快照分析工具,MAT,Jprofiler(推荐)
Debug,一行行分析代码
MAT,Jprofiler作用:
- 分析Dump内存文件,快速定位内存泄漏
- 获得堆中的数据
- 获得大的对象
…
下载JProfiler插件
安装插件后,一定要重启!
下载Jprofiler软件
下载地址:http://www.xue51.com/soft/12717.html#xzdz
无脑下一步即可!
最好自定义路径~
插件连接软件
开始测试
1、添加VM选项
命令代码讲解:
-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
- -Xms :
设置初始化内存分配大小
- -Xmx :
设置最大分配内存
,默认 -XX:+PrintGCDetails
: 打印GC垃圾回收信息-XX:+HeapDumpOnOutOfMemoryError
: OOM DUMP
2、测试代码
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
ArrayList<Demo> list = new ArrayList<>();
int count = 0;
try {
while(true){
list.add(new Demo());//利用JPofiler工具,即可查出这行代码的问题所在
count = count +1;
}
} catch (Exception e) {
System.out.println("count"+count);
e.printStackTrace();
}
}
}
3、找到生成的文件
4、分析故障
虽然知道大对象出问题了,我们又怎么知道具体哪行代码写错了?
接着往下看~