배경
GC 에러로 인해 서버가 다운되어서 원인을 알아보기 위해 dump 파일을 분석해볼 필요가 있었다.
Java - java.lang.OutOfMemoryError:GC overhead limit exceeded 원인
실행중이던 서버가 갑자기 다운이 되었다. 로그를 살펴보니 처음보는 에러였다. 서버를 다시 재실행하니 문제없이 잘 작동하기는 했지만 해당 에러에 대해 가볍게 정리를 해보고 이후에 제대로
green-bin.tistory.com
본 가이드는 Eclipse MAT를 맥에 설치하고 실행하는 방법에 대해 다룬다. MAT는 자바 애플리케이션의 메모리 사용량을 분석하고 문제를 진단하는 도구이다. OutOfMemoryError와 같은 에러가 발생할 경우, 일반적인 로직 에러와는 다르기 때문에 MAT를 통해 dump 파일을 읽고 분석하여 메모리 누수 원인을 알 수 있다.
개발 환경
- MacOS Monterey
- Java 11
설치
1. MAT 다운로드
- https://eclipse.dev/mat/download/ 접속
- Mac OSX (Mac/Cocoa/AArch64) 다운로드
- 다운로드한 mat.app 파일을 Applications 디렉토리에 설치
2. MAT 실행
설치한 Eclipse MAT을 실행하니 아래와 같은 에러가 발생했다.
Version 11.0.19 of the JVM is not suitable for this product.
Version: 17 or greater is required.
원인
현재 내 PC에 설치된 JDK 버전은 11.0.19인데 해당 애플리케이션에서는 최소 17 이상의 버전이 필요하다는 에러 메세지이다.
해결방법
해당 애플리케이션에 관련한 해결방법은 찾기 어려웠지만 Eclipse에서도 비슷한 문제가 있었고 Eclipse 해결 방법에서 힌트를 얻었다.(같은 회사에서 만든 애플리케이션이니까)
Eclipse Memory Analyzer의 버전 요구치를 내 JDK 버전에 맞춰서 낮추면 된다.
- mat.app가 설치되어 있는 경로로 이동
$ cd /Applications/mat.app/Contents/Eclipse
- MemoryAnalyzer.ini 파일을 vi로 편집
$ ls
MemoryAnalyzer.ini configuration features p2
ParseHeapDump.sh epl-2.0.html notice.html plugins
$ vi MemoryAnalyzer.ini
- 아래 내용을 추가한다.
-Dosgi.requiredJavaVersion=1.8
- Eclipse Memory Analyzer를 실행한다.
잘 실행되는 것을 확인할 수 있다!
혹시라도 더 나은 방법이 있다면 공유해주세요!
'Java' 카테고리의 다른 글
Mybatis - SAXParseException: The content of elements must consist of well-formed character data or markup 원인과 해결법 (0) | 2024.06.05 |
---|---|
Java - File로 파일 목록 이름 조회하기 (1) | 2024.01.25 |
Java - @JasonCreator로 DTO에서 유연하게 Enum Type 받기 (0) | 2023.04.26 |
Java - 커스텀 애너테이션으로 유효성 검사하기 (0) | 2023.04.22 |
Java - 제네릭(Generic)과 함께하는 리팩토링 (0) | 2023.04.17 |