Java Heap Memory Dump Analysis 분석
Eclipse 툴을 이용한 Memory Analizer Tool(MAT) 분석 방식
- Memory dump를 분석하는데 있어서 가장 우선적인 접근은 메모리를 점유하고 있는 상태를 파악하는 것이다.
MAT 툴을 이용하여 Dump 파일을 열면 기본적으로 아래와 같은 Overview 페이지가 생성된다.
Overview의 영역은 크게 1. Details, 2. Biggest Objectes by Retained Size, 3. Actions, 4. Reports, 5. Step By Step 의 영역으로 나뉠 수 있다.
- Details : heap 영역에 대한 개략적인 정보 제공
- Biggest Objectes by Retained Size : heap 영역에 생성된 Objects 들 중 가장 많은 영역을 차지 하는 일부 Object의 비율을 파이차트로 표시한다.
- Actions : 생성된 Object 들에 대하여 세부적인 내역을 제공한다.
- Histogram : heap 영역에 생성된 객체 타입에 따른 생성된 객체의 수, 하나의 객체가 차지하는 영역(Shallow)
해당 클래스의 객체들 전체가 차지하는 영역(Retained Heap)을 표시한다.
- Dominator Tree : 생성된 객체에 대한 인과관계(생성관계)를 계층 형태로 표시하며 생성된 객체의 크기 및
퍼센테이지를 표시한다.
- Top Consumers : 생성된 객체 중 가장 많이 생성된 객체를 중심으로 세부 정보를 표시한다. - Reposts : heap 영역에 대한 분석 리포트를 제공한다.
- Leak Suspects : 메모리 릭(Leak)으로 의심되는 객체에 대한 리포팅을 보여준다.
- Top Components : heap 영역에 대해 가장 많은 영역을 차지하는 객체에 대한 세부적이고 종합적인 내용 표시 - Step By Step : MAT를 이용하여 heap dump를 분석하는 별차에 대해 순차적인 데모를 제공한다.
- 객체의 생명주기를 JVM에서 관리한다는 것이 Java의 가장 큰 장점이지만 가장 큰 단점도 될 수 있을 것이다.
내부적으로 적게는 수천에서 많게는 수억개의 객체가 생성되고 소멸된다. 그러한 흐름을 이해하고 파악한다는 것은
프로그래밍을 하는 것 이상의 노력이 필요하며 그러한 노력을 해야할지도 의문이 드는 것이 사실이다.
MAT와 같은 도구를 이용하여 현재 내가 작성한 어플리케이션의 HEAP 영역에 생성되어 있는 객체를 본다는 것은
단순히 오류를 방지하는 것 이상으로 자신이 작성한 어플리케이션이 메모리 효율성이란 측면에서 어떻게 운영되고 있으며 어떻게 더 나은(Grow-up) 어플리케이션으로 나아가는지 고민해 볼 수 있는 하나의 방법이지 않을까 싶다.
출처: https://byplacebo.tistory.com/25 [pLacebo]
'Java' 카테고리의 다른 글
[Java] CPU 점유율이 높은 스레드 상태 분석(Thread dump) (0) | 2020.11.10 |
---|---|
[Java] Lombok (0) | 2020.10.20 |
[Java] PriorityBlockingQueue (0) | 2020.10.05 |
[Java] Generics(제네릭) (0) | 2020.09.29 |
[Java] StringTokenizer (0) | 2020.09.13 |