JVM이 실행되면 OS는 JVM에게 필요한 메모리를 할당합니다. 이렇게 OS에게 받은 메모리 영역을 Runtime Data Area라고 하는데, 크게 클래스, 스택, 힙 영역으로 구분합니다.
클래스 메모리는 우리가 만드는 클래스를 로딩하기 위한 영역이며 스택 영역은 메소드에서 사용하는 지역 변수나 매개별수를 저장하는 영역입니다. 일반적으로 클래스를 로딩하기 위한 클래스 메모리 영역은 일정한 값을 가지게 됩니다. 스택 메모리 영역 또한 메소드 호출이 끝나면 사라지기 때문에 큰 문제가 되지 않습니다. 주로 문제가 발생하는 영역은 힙 메모리 영역이 됩니다.
힙 메모리 영역은 동적 메모리 영역인데, 사용이 끝난 후에도 사라지지 않고 가비지 컬렉터가 지울때까지 유지하게 됩니다. 힙 메모리 영역은 JVM에서 최대치를 설정할 수 있는데, 너무 작게 잡으면 가비지컬렉터가 빈번히 호출되는 문제가 생기고 최대치를 너무 크게 잡으면 가비지 컬렉터 호출 빈도는 적어지지만 한번 수행시 길게 수행되는 문제가 발생합니다.
인프라 모니터링은 물리적인 메모리 영역에 대한 내용을 보여주지만 애플리케이션 성능 분석 모니터링은 WAS 별 힙 메모리 사용량을 보여줍니다.
힙 메모리 챠트는 최대 사용량과 현재 사용량을 표시합니다. 최대 사용량은 시스템이 선점해 놓은 사용량을 의미하며 현재 사용량은 실제 애플리케이션이 사용하고 있는 힙 메모리 량을 보여줍니다. 가장 간단한 사용 예를 말씀드리면 애플리케이션 성능 분석을 하는 과정에서 최대 사용량과 현재 사용량이 동일하다면 서비스에 문제가 발생하고 있다고 생각할 수 있습니다. 만일 CPU 부하율이 낮은 상태에서 힙 메모리의 현재 사용량이 최대치에 도달한다면 메모리 릭을 의심할 수 있으며 CPU 부하율과 힙 메모리 사용량이 둘다 최대치에 가깝다면 트랜잭션의 부하가 증가하고 있을 확률이 높습니다.