OOM了,怎么办?
最好能够快速找到代码第几行出错:
内存快照分析工具:MAT,Jprofiler
MAT、Jprofiler 作用:
- 分析Dump内存文件,快速定位内存泄漏。
- 获得堆中的数据
- 获得大的对象
Jprofiler安装:
- IDEA插件中搜索Jprofiler即可,安装好restart IDEA
- 去网页搜索Jprofiler,下载对应的操作系统的安装文件
3.安装好应用即可。
Jprofiler使用:
举例说明,写一个OOM的情况
package com.gao.test.JVM;
import java.util.ArrayList;
/**
* @Author lie
* @Description
*/
/**
* VM options:
* -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
*
* -Xms:初始化内存分配大小 (默认 1/64)
* -Xmx:最大分配内存 (默认 1/4)
* -XX:+PrintGCDetails 打印GC垃圾回收信息
* -XX:+HeapDumpOnOutOfMemoryError 打印OOM信息
*/
public class OomTest {
byte[] array = new byte[1024 * 1024]; //1m
public static void main(String[] args) {
ArrayList<OomTest> list = new ArrayList<>();
int count = 0; //计数器
try {
while (true){
list.add(new OomTest()); //问题所在
count += 1;
}
}catch (Error e){ //要用ERROR捕捉OOM错误
System.out.println("count = "+count); //打印创建了几个对象后OOM
e.printStackTrace();
}
}
}
运行后看看
dump出来的文件在这
用Jprofiler打开,分析并排查原因:
查看线程,找到问题所在