오늘은 일을 하다가 고객사쪽에서 OOM(Out Of Memory) 현상이 나서 힙메모리 원인을 파악하다가 Heap Memory 분석 툴사용방법을 알려드릴려고합니다.
1. 설치방법
URL : https://www.eclipse.org/mat/downloads.php
Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 415 open source projects, including runtimes, tools and frameworks.
www.eclipse.org
해당 URL에서 Windows 버전 다운로드 후 설치 진행
2. heap dump 파일 준비
분석하려는 .hprof 힙덤프파일을 준비합니다.
3. heap dump 파일 분석
파일을 분석하기전 저는 파일용량이 너무 커서 파일을 열수가 없더라고요,
위에서 다운로드 받은 MemoryAnalyzer 설치위치에 가시면 MemoryAnalyzer.ini 파일이 있을꺼에요,
Xmx 힙메모리 10g로 설정하였습니다, 힙덤프보다 큰 메모리 사이즈로 설정, 그리고 MemoryAnalyzer 최소 JDK 요구 버전이 11이상이여서 JAVA_HOME을 설정해도 되지만 기존에 제가 쓰는 버전이 있기때문에 ini파일에 JVM 위치를 지정하였습니다.
좌측 상단에 File -> Open Heap Dump... 클릭 후 준비 해놓았던 heap dump 파일 선택
Finish 선택
파일을 열면 이런식으로 memory leak을 보여주고 아래쪽에 Problem Suspect쪽을 보면 Keywords 에서 어느 클래스 어떤 함수쪽에서 에러가 나오는지 라인까지 찍혀있어서, 그쪽부분을 확인하시면 메모리 누수가 왜 나는지 알수있습니다.
Details로 들어가서 Thread Stack을 보시면 어떤 부분에서 호출하고 어떤 함수에서 에러나오는지 쭉 로그들이 나와서 이 로그들을 분석해서 원인을 파악하시면 조금더 쉽게 해결 하실 수 있습니다.
저도 고객사에서 처음 메모리 누수가 발생한다고 했을땐,,, 어떻게 해결해야되지 싶었는데 그래서 static, stack, heap 메모리쪽 다시 한번 공부하게되고, 별의별걸 다 봤는데, 제 원인은 다른 개발자가 무한루프 돌게 코드를 짜놨더라고요,, 무한루프 안에서 계속 객체를 생성하다보니깐 OOM이 나고 Full gc현상이 났었습니다, 이번기회에 Full gc나 메모리영역도 다시한번 공부하게 된 계기가 된거 같습니다.
이 툴을 몰랐을때는 전체 소스에서 static쪽에 올린것들 다찾아보고 static함수에서 객체 선언한것들 메모리영역이 삭제되는지 엄청 찾아봤었는데,,,,, 원인은 무한루프였다니,,,ㅠ 이런 오류 하나하나로 조금더 공부하는 개발자가 되겠죠 ㅎㅎㅎㅎ 이번기회에 자바 메모리부분은 엄청 많이 공부하게된거 같네요 ㅎㅎㅎ
다들 OOM이나 오류나시는것들 빠른 해결되시길 바랍니다~
'IT관련' 카테고리의 다른 글
정보처리기사 자격증 후기 (0) | 2023.04.07 |
---|---|
REST API란? REST API와 RESTful API의 차이점 (0) | 2023.04.04 |
LG CNS 프로그래머스 코딩 관련 (0) | 2022.11.21 |
앱코 무접점 스카이문 키보드 세척 후기 (1) | 2022.10.06 |
IT에서 말하는 형상관리란 무엇인가? (0) | 2022.09.20 |
댓글