JMX 힙덤프

2022. 12. 18. 18:50카테고리 없음

java Mission Control

 

 

JMX?
JMX는 실행 중인 애플리케이션의 상태를 모니터링 하고, 설정을 변경할 수 있게 해주는 API라고 이해하면 될 듯 하다. 이해하기 쉬운 단순한 규격을 가지고 있어서 어렵지 않게 런타임 상태의 애플리케이션을 관리할 수 있다.

 

 

장점

-웹사이트를 통해 원격의 Web Server, was, db등의 상태 모니터링, Start, Stop등의 기능, 디바이스 상태, 각종 서비스제어 등의 기능을 제공할 수 있습니다.

-JMX 기술을 사용하여 리소스를 관리하려면 Java 프로그래밍 언어로 리소를 관리해야하는데 MBeans로 알려진 Java 객체를 사용하여 리소스를 관리합니다.

 

 

RMI:

분산객체 간의 통신을 구현하는 모든 프로토콜을 의미함. (CORBA, DCOM …)

장점은  구현이 쉽습니다.

소켓으로는 프로토콜을 구현하기가 매우 까다롭고 힘이 듭니다. 하지만 Java RMI Socket 통신 자체를 하부에 숨기고, 상위 레벨에서 수행하여, 분산객체 간의 데이터 전송을 메소드를 부르는 것과 같은 방법으로 구현하기 때문에 훨씬 구현하기 쉽습니다.

 

 

힙덤프 ?

 

OOME(Out Of Memory)발생하게 될 경우 어플리케이션이 죽게  된다 .

이때 Heap의 높은 사용량을 만든  원인을 찾기 위해   HeapDump를 해야 한다.

그것을 "HeapDump를 뜬다"라고  현업에서는 말하는데 

이것은 즉 장애가 났을때의 Heap상태를 기록으로  남겨기는 것을 의미하고 그것을 가지고 

MAT (MemoryAnalyzer)분석 툴로 원인을 찾을 수 있다.

 

 

Heap Dump 하기 위해서 

 

1. 먼저 Heap Dump를 뜨기 전에 운영되고 있는 어플리케이션 프로세스의 PID를 알아낸다.

$ jps
84544 SpringDemoApplication  

그리고 jmap 툴을 이용하여 Heap Dump를 뜨면 된다.
명령어 형식은 아래와 같다.

$ jmap -dump:format=b,file=[FILE_NAME] [PID]

$ jmap -dump:format=b,file=heapdump.hprof 84544

명령어가 성공적으로 실행되면 heapdump.hprof 이름의 Heap Dump 파일이 생성될 것이다.

2. Heap Dump 분석하기 

 

생성된 Heap Dump 파일을 분석하는 여러 방법이 있겠지만, 그중에서 Eclipse Memory Analyzer(MAT) 툴을 이용하여 분석해보자.

"<시스템 클래스 로더>"에 의해 로드된 java.lang.ref.Finalizer"는 37,664,488(68.76%) 바이트를 차지합니다.

keywords:  위에 문제가 된 소스 파일이 어느 파일에 있는지 알려준다.

 

incoming이면 해당 object를 참조하는 object를, outgoing이면 해당 object가 참조하고 있는 object를 포함해서 보여준다.

 

java.lang.refFinalizer객체를 참조하는  목록들을 보여준다.

메모리 주소 간격이 비슷 한것으로 봐서, 연속적으로 쭉 할당된 것으로 파악된다.

 

 

 

 


oome 발생시에 
jmap를 통해서 힙덤프를 뜰 수 있다.
(힙덤프:힙 메모리의 내용을 그대로 떠놓은 파일)

그것을 가지고  MemoryAnalyzer ,MAT분석툴을 가지고 볼수 있다.

 

 

참고:[Java] JMX, JMX MBean이란 ? (tistory.com)

[WAS 이슈 해결 #2] MAT 힙 덤프 분석으로 JAVA 메모리 누수(Memory Leak) 잡기 - 톰캣 힙메모리 증가 문제 / Out of Memory :: 외장하드 (tistory.com)

(Troubleshooting) 생애 첫 Heap 메모리 분석기 (feat. Eclipse MAT) | 오늘도 끄적끄적 (perfectacle.github.io)