Print
카테고리: [ Java ]
조회수: 1287

1. 개요

최근 JMC(JDK Mission Control) 8.1가 릴리스 되었다. 이 버전부터 JMC Agent 플러그인이 즉시 제공되므로 성능 모니터링 요구 사항에 대해 쉽게 활용 가능하다. 

이 플러그인은 실행중인 JVM에 사용자 지정 JDK Flight Recorder(JFR) 이벤트를 추가하는 편리한 방법을 제공한다. 

JMC Agent 플러그인은 업스트림 JDK Mission Control 8.1의 일부이기 때문에 간단히 다운로드하고 실행하여 사용할 수 있다. 

(JDK 미션 컨트롤 8.1.0 및 JMC 에이전트 JAR을 다운로드)

 

 

JFR은 OpenJDK 8u272 이상 에서 사용할 수 있는 이벤트 기반 프로덕션 환경 프로파일러인데, 

HotSpot 기본 기능인 JDK Flight Recorder는 공간과 시간을 모두 사용하는 방법 측면에서 매우 낮은 오버헤드로 수행된다. 

JDK Flight Recorder는 기본적으로 기본 Java 런타임 정보를 수집하지만 JFR의 이벤트 API를 사용하여 사용자 정의 이벤트를 수집하는 것도 가능하다. 

 

 

2. JDK Flight Recorder 도구 체인

 1) JDK Flight Recorder

  JDK Flight Recorder는 원래 JRockit JVM 기능이었다. 주요 JVM 이벤트를 캡쳐하고 오프라인 분석을 위해 flight 파일에 기록한다. 

  2018년에 Oracle은 이 기능을 JDK Flight Recorder라는 이름으로 오픈 소스화하여 OpenJDK 11에 통합했고, JFR도 OpenJDK 8로 백포트 되었다. 

  개발자는 JDK Flight Recorder를 사용하여 프로덕션 환경에서 JVM을 프로파일링한다. JFR은 이벤트를 컴팩트 바이너리 형식으로 기록하고, 이러한 이벤트를 메모리 내 버퍼에 먼저 저장한다.

  주기적으로 버퍼를 파일 시스템이나 다른 저장소로 플러시하고, JFR은 "항상 켜진" 프로덕션 시간 프로파일러를 의미하며 대부분의 사용 사례에서 오버헤드가 2% 미만이다. 

 2) JDK Mission Control

  바이너리 형식으로 fligh를 기록하는 것은 그 자체로는 유용하지 않다. OpenJDK는 이러한 기록에서 액세스하고 콘텐츠를 디코딩하는 도구를 제공한다. 

  JDK Mission Control은 JFR 녹음을 분석하기 위해 특별히 설계된 GUI 도구인데, JDK Flight Recorder와 함께 JMC는 개발자에게 응용 프로그램의 런타임 특성에 대한 심층적인 보기를 제공하며,

  이 보기를 사용하여 성능 병목 현상을 식별하고 JVM을 미세 조정할 수 있다. JMC는 또한 로컬에서 실행되는 JVM에 연결하여 새 Recoding을 수행하고 진행 중인 Recoding을 제어할 수 있다.

 3) JMC Agent 플러그인

  JMC Agent 플러그인은 JMC Agent가 JDK  Mission Control에 기능을 통합하기 위한 것이다. 

  JMC Agent 플러그인은 JMC Agent에 대한 것이며 JDK Mission Control은 JDK Flight Recorder에 대한 것이다. 

  JMC Agent 플러그인은 이미 JMC Agent 수명 주기를 탐색하는 데 도움이 된다. 플러그인을 사용하여 로컬 JVM에서 JMC Agent를 시작한 다음 JMX API를 통해 연결할 수 있다. 

 

 

3. 결론

JDK Flight Recorder는 프로덕션 시간 프로파일러이다.

이러한 맥락에서 JMC Agent는 JFR 도구 체인에 대한 강력한 추가 기능이고, 개발자로서 JMC Agent를 사용하면 JVM을 종료할 필요 없이 런타임 애플리케이션을 계측할 수 있다.

애플리케이션을 다시 배포하기 위해 코드를 리팩터링하고 다시 컴파일할 필요가 없다. 

 

 

 

* 참고 URL : 

1) https://developers.redhat.com/articles/2021/11/16/jvm-performance-monitoring-jmc-agent?sc_cid=7013a000002pzmBAAQ

2) https://developers.redhat.com/blog/2020/10/29/collect-jdk-flight-recorder-events-at-runtime-with-jmc-agent

3) JMC 다운로드 : https://jdk.java.net/jmc/8/