VisualVM: 자바 프로세스 모니터링

강민석·2023년 3월 1일
0

JAVA

목록 보기
7/7

1. 개요

회사에서 담당 프로세스의 성능 테스트를 진행함에 앞서서, aspect log등에 의존하는 것이 아닌 시각화된 라이브러리, 툴 등에 대해 조사를 했다. 이 과정에서 JAVA 프로세스의 모니터링을 할 수 있는 visualVm이라는 툴을 찾게 되어 이에 대한 정리를 해보려고 한다.

2. VisualVm이 뭔가요?

"[All-in-One Java Troubleshooting Tool] VisualVM is a visual tool integrating commandline JDK tools and lightweight profiling capabilities. Designed for both development and production time use." -VisualVm github.io

VisualVm은 JAVA프로세스의 CPU, MEMORY 등의 점유자원 확인과 실시간 쓰레드 상태와 ThreadDump등의 쓰레드에 대한 모니터링이 가능한 툴이다.

앞서 설명한 내용외에도 부가적인 기능이 많은데, 먼저 어떤 기능들이 있는지부터 살펴도록 할 계획이다.

5초마다 특정 기능을 수행하는 쓰레드를 가지고 있는 프로세스를 구성하여 실행하고, 지원기능을 살펴보도록 하자.

연동된 서버에 JAVA프로세스가 기동되면 아래와 같이 프로세스 목록에 추가가되며, 클릭을 해 해당 프로세스에 대한 모니터링을 할 수 있다.

2.1 지원 기능

해당 목차에서는 앞서 설명한 간단한 테스트 프로세스를 이용하여 기능들을 살펴보려고 한다.

  • 자바 프로세스의 옵션 및 설정 디스플레이: JAVA프로세스를 띄울 때 설정값 정보를 제공한다.
  • 점유 자원 시각자료 디스플레이: CPU, MEMORY, GC 등의 사용량 정보를 제공한다. 특정 쓰레드가 5초마다 작업을 함에 따라 CPU 사용 그래프가 아래 그림과 같이 나타나는 것을 볼 수 있다.
  • 실시간 쓰레드 상태제공: Running, Sleeping, Wait, Park 등의 쓰레드 상태를 실시간으로 제공한다. 아래 그림을보면 5초마다 Running과 Sleeping 상태를 주기적으로 천이하는 Thread-1을 확인 할 수 있다.
  • ThreadDump 제공: 프로세스의 ThreadDump를 떠 제공하고, 추후 볼 수 있도록 프로세스 별로 관리한다.
  • 실시간 쓰레드 태스크 수행내용 제공: 특정 쓰레드가 태스크를 진행함에 있어, 어떤 메소드를 실행했고 시간이 얼마나 소요되었는지를 보여준다.
  • 실시간 클래스 별 메모리 점유량 제공: 실시간으로 특정 클래스가 메모리를 얼마나 점유하고 있는지 확인할 수 있다.
  • JDBC를 통한 쿼리 수행시간 제공: 실시간으로 수행된 쿼리의 소요시간을 볼 수 있다.

이 외에도 VisualVm의 기본기능에는 특정 쓰레드가 어떤 클래스에 의해 Block이 되었는지 Lock의 상태를 확인하거나 Heap의 상태를 확인하는 등의 다양한 기능이 있다.

VisualVm은 이렇게 제공해주는 기본기능 외에도 추가 기능을 활성화하는 extend를 가지고 있는데, 다음 목차에선 이에 대해 알아보자.

2.2 extend (plugins) 적용

위의 기본 기능을 제외하고도 VisualVm은 extend를 가지고 있는데, gui를 통해 간단하게 다운로드를 받고 적용 할 수 있다.

오늘은 GC를 확인할 수 있는 extend를 다운로드 받아 적용해보자. 본 과정은 m1 mac을 사용하여 진행하였다.

먼저, 상단 메뉴바의 Tools를 선택하고 Plugins를 클릭하자. (윈도우 환경에서는 extend, 맥 환경에서는 Plugins라고 칭하는 것 같다.)

Plugins창 내 메뉴의 Available Plugins를 클릭하면 다운로드 가능한 플러그인들을 확인할 수 있다. 여기서 VisualGC를 체크하고 Install 버튼을 눌러 다운로드해보자.

Installed 메뉴에 VisualGC가 추가되었다면, 정상적으로 설치된 것이니 VisualVM을 재실행하고 JAVA프로세스를 연동해보자. 연동을해보면, 전에는 없던 VisualGC 메뉴가 생성된 것을 확인할 수 있다.

해당 기능을 사용하면 이론상으로만 들었던 GC의 Old, Eden, S0, S1 등의 영역과 처리방식에 대해 보다 높은 이해도를 가질 수 있을 것이라고 생각한다.

4. remote vm

위의 목차에서 다룬 로컬 환경에서의 JAVA프로세스를 모니터링하는게 아닌, remote환경의 프로세스를 모니터링하는 실습을 진행할 예정

  • 다음주 작성예정: 상세한 목록별 기능, VisualVm이 어플리케이션에 미치는 영향? remote vm

0개의 댓글