[JVM] Heap dump 힙 덤프 개념 - 왜 필요한가
동적으로 할당되어 사용할 수 있는 메모리 영역
주로 실행중에 생성되는 객체들이 저장되고, 실행 후 제거되는 영역
GC(Garbage Collection)의 대상의 되는 메모리 영역
가비지 컬렉터는 가비지 컬렉션을 통해 힙 영역에 있는 사용되지 않는(더이상 참조가 없는) 객체를 회수한다.
힙 영역에 있는 동적으로 할당된 객체가, 더이상 사용되지 않음에도 불구하고 가비지 컬렉터에 의해 회수되지 않고 메모리에 남아있어서 자리만 차지하는 현상
메모리 누수가 쌓이면 메모리가 부족하게되서 결과적으로 OutOfMemoryError 가 발생한다
가비지 컬렉터는 메모리 누수인지도 모르고, 메모리가 부족하니까 계속 메모리를 회수하려고 가비지 컬렉션을 지속적으로 발생시킨다. 결국 너무 자주 일어나는 가비지 컬렉션은 성능상 문제를 일으킨다.
OOME는 대부분 개발이 완료된 후 사용자 테스트 혹은 인수 단계에서 많이 발생한다. 개발환경에서 테스트하다가 사용자환경으로 인수한 경우 많이 발생한다. 이럴때, 빠른 대응이 필요한다.
JVM Option을 조정하거나, 힙 덤프 파일의 분석을 통해 대응을 한다.
자바의 최대 장점으로 JVM이 OS위에서 돌아가면서 자바 어플리케이션은 어떤 OS 위에서도 동작할 수 있다. 하지만, 동작만 할 뿐이지 최적화가 되어있는 것은 아니다. 따라서 JVM 옵션을 통해 최적화하도록 옵션을 제공한다.
Standard 표준, Non-Standard 비표준 Option으로 나뉜다. 표준 옵션은 JVM 벤더와 상관없이 동일한 옵션을 갖는다. 비표준 옵션은 주로 -X, -XX로 시작되며, 힙메모리 사이즈와같이 최적화를 위한 옵션들이 존재한다. 각 옵션들을 일일이 외울 필용는 없다. 오라클 홈페이지를 필요할때 참조하자.
Ex. -XX:PermSize => 힙 메모리의 Permanent 사이즈 조절.
※ Permanent 등 JVM의 힙 메모리 구조는 http://blog.naver.com/kbh3983/220967456151 참조
메모리 누수가 많이 발생해서 GC가 많이 발생하고 성능상 문제를 일으킬 때면 약간 늦은감이 있다.
힙 모니터링을 통해 일이 커지기 전에 메모리 누수를 찾아내자.
위와 같이, GC가 계속 수행되도 Used 메모리가 떨어지지 않고 증가할 경우 메모리 누수를 의심해볼 수 있다. 이러한 경우 힙덤프를 생성하고, HeapAnalyzer를 통해 분석해야 한다.
(힙 모니터링 도구 설치 및 사용법은 추후 포스팅 예정)
메모리 누수 문제를 힙 덤프를 통해 분석할 수 있다.
덤프파일이란, 덤프를 뜰 때의 어플리케이션의 상태를 스넵샷 형태로 파일로 저장한 것이다.
'JAVA > JVM' 카테고리의 다른 글
[JVM] 기본 GC 튜닝 (0) | 2021.12.16 |
---|---|
[JVM] GC 알고리즘 - Overview (0) | 2021.12.16 |
[JVM] JIT 컴파일 로그, 컴파일 스레드, 인라이닝 튜닝 (0) | 2021.12.16 |
[JVM] JIT : Just In Time Compiler 개념 & 튜닝 (0) | 2021.12.16 |
[JVM] PERM 영역 이해하기 (0) | 2021.12.16 |
[JVM] CPU 사용률 , Run Queue 런큐 (0) | 2021.12.16 |
[JVM] GC 기본개념 - JVM메모리 구조 / Minor GC / Full GC (0) | 2021.12.16 |
[JVM] JVM 종류 - Hotspot vs JRockit (0) | 2021.12.16 |