먼저 문제 상황은 다음과 같다.

잘 굴러가던 서버에서 갑자기 OOM이 발생하는 것이다. 에러 메세지를 좀 더 자세히 확인해보니 java.lang.OutOfMemoryError: Java heap space 에러가 발생하고 있었다.

도통 원인이 뭔지 모르겠어서 메모리 영역을 체크하기 위해 서버에서 oom시 heap dump를 뜨도록 설정했다.

docker build를 이용해서 이미지를 생성, 해당 이미지를 docker-compose를 이용하여 컨테이너 실행하는 과정을 거치고 있었으므로 각 영역에다가 옵션을 걸어줬다.

왜인지 모르겠지만, docker-compose.yml에다가만

- JAVA_TOOL_OPTIONS=-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/logs/heapdump.hprof -XX:+ExitOnOutOfMemoryError -XX:OnOutOfMemoryError="jcmd GC.heap_dump /opt/logs/heapdump_%p.hprof"

해당 옵션을 걸어주면 heap dump가 제대로 생성되지 않는다. 빌드할 때 옵션을 걸어줘야 한다.

이후 생성된 heapdump.hprof 파일을 확인했다. (인텔리제이로 파일을 열면 된다.)

해당 파일을 확인한 결