티스토리 뷰

Java

JFR (Java Flight Recorder) - JVM 진단 Tool

§무명소졸§ 2022. 11. 30. 19:40

https://en.wikipedia.org/wiki/File:Fdr_sidefront.jpg

 

블랙박스라는 이름이라고 익숙하게 알려진 비행기록장치(Flight recorder)는 항공 사고시 원인을 파악하기 위한 중요한 장치이다.

JFR 을 풀어쓰면 Java Flight Recorder 인데 아마도 블랙박스에서 네이밍 영감을 얻었을까?

어쨌든 JFR 은 JVM 의 상태를 확인할 수 있는 프로파일링 유틸리티 소프트웨어이다. Java8 에서는 유료였지만, Java11에 와서 JMC 와 함께 무료로 사용할 수 있다. 용도로만 봤을 때 웹 형태로 지원하는 제니퍼와 같은 국산 상용 툴이 나 Scouter 와 같은 국산 오픈소스,  SASS 형태로 제공하는 APM 툴, 설치형으로 VisaulVM 과 같은 무료 CS 프로그램등 과 비슷한 역할을 한다.

하지만 위에서 언급한  Tool은 이용할 경우 설치가 필요하거나 비용이 든다. JFR 은 JAVA 에서 기본으로 제공하는 명령어로서 별 다른 설치없이 JVM 상태를 확인할 수 있고 Heap Dump 와 같이 오버헤드 크지 않다.  해당 사용법을 간단히 알아보자.

 

모니터링

JPS

jps 명령어는 자바 프로세스를 확인할 수 있는 JAVA 내장 명령어이다. 실행할 경우 아래와 같이 프로세스 ID 와 이름을 반환한다.

jps 

ex) OUTPUT
69815 DemoApplication
69814 Launcher
80152 Jps
99736

JCMD

JVM 을 진단 명령어를 위한 요청이다. 아래와 같이 입력하면 가능한 명령어를 확인할 수 있고 중간쯤에 JFR 관련 명령어를 볼 수 있다.

$jcmd 69814
 
-- 생략 --
GC.run
GC.run_finalization
JFR.check 
JFR.configure 
JFR.dump
JFR.start
JFR.stop   
JVMTI.agent_load
JVMTI.data_dump
ManagementAgent.start
ManagementAgent.start_local

-- 생략 --

JFR

JFR.start

아래 명령어로 recod를 시작할 수 있다. 

$jcmd 69814 JFR.start name=demoapp 
69814:
Started recording 1. No limit specified, using maxsize=250MB as default.

Use jcmd 69814 JFR.dump name=demoapp filename=FILEPATH to copy recording data to file.

JFR.dump

아래 명령어로 dump 파일을 만들어 낸다. dump 파일을 만든다고 모니터링이 중단되지 않는다.

$jcmd 69814 JFR.dump name=demoapp filename=demoapp.jfr 
69814:
Dumped recording "demoapp", 870.5 kB written to:

/Users/rick/Library/Caches/JetBrains/IntelliJIdea2022.2/compile-server/demoapp.jfr

JFR.check

명령어를 실행해 현재 JFR 의 상태를 확인한다.

$jcmd 69814 JFR.check                                 
69814:
Recording 1: name=demoapp maxsize=250.0MB (running)

JFR.stop

명령어를 실행해 현재 모니터링을 중단합니다.

$jcmd 69814 JFR.stop name=demoapp
69814:
Stopped recording "demoapp".

 

분석

위에 덤프 실행시 만들어진 demoapp.jfr 파일을 이용해 JMC Tool 또는 IntelliJ 를 이용해 분석을 할 수있다. 

JMC(Java Misson Control)

https://www.oracle.com/java/technologies/javase/products-jmc8-downloads.html


IntelliJ

인텔리J 에 Drag 하거나 더블클릭하면 바로 아래와 같이 정보를 확인할 수 있다.

 

실제 덤브 파일 세부 내용에 대한 분석 방법은 범위가 크기 때문에 다른 레퍼런스를 확인바란다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크