package com.example.bkjeon;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("test")
public Integer callTest() {
List<OOMTest> students = new ArrayList<>();
for (int i = 0; i < 100_000_000; i++) {
students.add(new OOMTest(i, "test" + i));
}
return students.size();
}
}
[OOMTest.java]
package com.example.bkjeon;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class OOMTest {
private final Integer id;
private final String name;
}
해당 코드를 실행하면 java.lang.OutOfMemoryError: Java heap space 에러가 발생한다.
이제 OOM 발생 시 자동으로 Heap Dump 를 생성하게 만들자.
// Application 구동시 VM Options 에 하기 명령어를 추가하자. (2번째 명령은 heapdump 파일이 저장될 경로이다.)
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/Users/lotte/Desktop/heapdump.hprof
상기 API 를 실행하면 아래와 같이 OOM 이 발생하며 Dump 파일을 생성한다. (단, OOM 이 발생하지 않는경우 JVM 메모리 사이즈를 줄여보자. Ex) -Xms256M -Xmx256M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/lotte/Desktop/heapdump.hprof)