OOM分析
Java堆内存溢出
启动参数:
- -Xms250m -Xmx250m ,最大最小堆内存250m,禁止自动扩展内存
- -XX:+HeapDumpOnOutOfMemoryError:在发生OOM时进行堆内存Dump生成快照
public class oomController {
@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody
void test() {
List<TestInst> testInstList = new ArrayList<>();
Long i = 0L;
while (true) {
TestInst testInst = new TestInst();
testInstList.add(testInst);
}
}
}
class TestInst {
String name;
String desc;
}
- 不不断的创建对象,并且保证GC Roots到对象之间有 可达路路径来避免垃圾回收机制清除这些对象
- 启动项目并调用上述方法,项目将马上报错内存溢出:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid98284.hprof ...
Heap dump file created [338473308 bytes in 1.782 secs]
七月 19, 2021 11:09:28 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space] with root cause
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:265)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
at java.util.