회사에서 담당 프로세스의 성능 테스트를 진행함에 앞서서, aspect log등에 의존하는 것이 아닌 시각화된 라이브러리, 툴 등에 대해 조사를 했다. 이 과정에서 JAVA 프로세스의 모니터링을 할 수 있는 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프로세스가 기동되면 아래와 같이 프로세스 목록에 추가가되며, 클릭을 해 해당 프로세스에 대한 모니터링을 할 수 있다.
해당 목차에서는 앞서 설명한 간단한 테스트 프로세스를 이용하여 기능들을 살펴보려고 한다.
이 외에도 VisualVm의 기본기능에는 특정 쓰레드가 어떤 클래스에 의해 Block이 되었는지 Lock의 상태를 확인하거나 Heap의 상태를 확인하는 등의 다양한 기능이 있다.
VisualVm은 이렇게 제공해주는 기본기능 외에도 추가 기능을 활성화하는 extend를 가지고 있는데, 다음 목차에선 이에 대해 알아보자.
위의 기본 기능을 제외하고도 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 등의 영역과 처리방식에 대해 보다 높은 이해도를 가질 수 있을 것이라고 생각한다.
위의 목차에서 다룬 로컬 환경에서의 JAVA프로세스를 모니터링하는게 아닌, remote환경의 프로세스를 모니터링하는 실습을 진행할 예정