🪓삽질노트

[JAVA] java.lang.OutOfMemoryError : Java heap space (3) Heap Dump 분석 - MAT

디카페인라떼 2022. 10. 26. 22:29

최종 프로젝트를 진행하면서 인프라를 담당하게 되었는데 그 중 마주친 OOM 에러.(22.10.13 THU) 

끝끝내 원인을 찾지는 못하였지만 어떻게 문제를 분석하고 임시방편이지만 어떻게 처리하였는지 기록해 보고자 한다. 

 

2022.10.26 - [🪓삽질노트] - [JAVA] java.lang.OutOfMemoryError : Java heap space (1) 문제 정의 & 사실 수집 & 원인 추론

2022.10.26 - [🪓삽질노트] - [JAVA] java.lang.OutOfMemoryError : Java heap space (2) 조사 방법 구현 & 결과 관찰


다시 원점으로 돌아왔다. 원인을 파악해야한다.

일단은 로그를 찾아보았다. 확인을 해보니 java.lang.OutOfMemoryError 를 내뱉기 전에 2번정도 다른 에러를 내뱉고 바로 OOM을 내고 뻗어 버렸다.

하지만 구글링을 해보아도 무엇이 원인이 되는 지 잘 확신이 서질 않았다. 

그러던 와중에 OOM 에러에는 Heap Dump를 분석하여야 정확히 원인을 알 수 있다는 걸 알게되었다. 

 


2022.10.26 - [☕JAVA/🔎공부 [JAVA]] - [JAVA] Heap 모니터링 & Heap Dump 분석하기

 

Heap Dump에 대한 정리는 따로 해두었다. 

 

 

Heap Dump 분석하기

하루만에 OOM에러가 2번 생겼고 HeapDump 파일도 2개가 생겼다.

 

 

두 파일 모두 분석하였으나 결과가 동일하였다.

 

org.springframework.security.web.firewall.StrictHttpFirewall$StrictFirewalledRequest

가 86.81%나 된다. 

 

[Details]

 

 

  • 상기 내용으로 구글링도 해보고 질문도 해보았지만 여전히 오리무중이다.
  • org.springframework.security.web.firewall.StrictHttpFirewall$StrictFirewalledRequest 
    • StrictHttpFirewall 에 의해서 문제가 생긴 것 같은데 가장 흔한 문제는 더블 슬래시 였다.
    • 하지만 더블슬래시로 들어오는 요청은 프론트는 물론 스프링 코드 상에도 없다.
  • 분석만으로도 단서를 잡기가 어려워서 실시간 모니터링으로 들어오는 요청과 Heap Memory 사용량을 보기로 하였다.