본문 바로가기

4.개발 및 운영 환경

VisualVM 소개

들어가기

visualvm를 활용한 java 프로파일링을 하기 위한 도구이다. 간단하게 사용하기 유용하기에 소개할려고 한다.

작성자: ospace114@empal.com, http://ospace.tistory.com/

VisualVM이란?

java 플로파일링하는 도구로 기본적은 모니터링 기능과 프로파일러를 제공하고 있다. 프로파일러는 CPU, Memory, JDBC, Locks를 지원하고 있다.

실행방법

  • JDK 1.8 이상이 필요
  • JDK를 찾을 수 없을 경우 직접 경로 입력 가능
$ visualvm --jdkhome "\path\openjdk-17.0.2"

VisualVM 2.1.7인 경우 JDK 1.8로는 실행이 안되고 JDK 17.0.2로 실행이 가능했다. 물론 모든 버전을 확인하지 못했다. 만약 실행했는데 아무런 에러 없이 실행하다가 종료된다면 더 높은 JDK 버전을 사용해보시기를 추천한다.

이상없이 실행되면 아래와 같이 기본화면이 표시된다.

Fig 01. 기본화면

왼쪽에 로컬이나 원격에 실행중인 자바 애플리케이션을 표시한다. 해당 애플리케이션을 선택하면 오른쪽 화면에 모니터링 정보 및 프로파일할 수 있는 기능을 제공한다.

사용법

먼저 왼쪽 Local에서 실행중인 자바 애플리케이션 선택한다.

Fig 02. Java 애플리케이션 선택

선택된 프로세스에 대해 기본정보, 모니터, 쓰레드, 샘플러, 프로파일러 기능을 사용할 수 있다.

Monitor 탭

모니터탭에서는 현재 프로세스가 사용중인 리소스 정보를 표시한다. 표시하는 리소스 정보는 CPU, Heap, Classes, Threads 정보 실시간으로 표시해준다.

Fig 03. 모니터 화면

Thread 탭

프로세스에서 사용 중인 Threads 정보을 표시한다. 쓰레드를 All/Live/Finished/Selected 조회해서 표시해준다.

Fig 04. 스레드 화면

Sampler 탭

샘플러는 프로세스에서 선택된 정보에 대해서 샘플링한다. 샘플링은 주기적으로 정보을 추출하는 방식이기에 추적하는데 사용하기는 적합하지 않고 현재 사용중인 자원에 모니터링용으로 사용하는게 좋다. 시작하는 방법은 샘플링할 대상을 선택하면 샘플링이 시작되고 Stop 버튼이 활성화 된다. Stop 버튼을 클릭하면 샘플링을 중지한다.

Sampler: CPU

CPU에 대한 샘플링한다. 실행 중인 CPU에서 호출하는 함수에 대한 실행 정보를 수집한다.

Fig 05. CPU 샘플링 화면

Sampler: Memory

메모리에 대한 샘플링한다. 메모리 사용량에 대해 정보를 수집한다.

Fig 06. 메모리 샘플링 화면

Profiler 탭

프로파일러는 프로세스에서 선택된 정보에 대해서 프로파일링을 시작한다. 프로파일링은 실행되는 모든 정보를 추적한다. 애플리케이션 튜닝에 활용할 수 있다. 사용하는 방법을 앞의 샘프링과 비슷하다. 시작은 프로파일링 대상을 선택하고 중지하려면 Stop 버튼를 클릭한다.

시작: CPU, Memory, JDBC 버튼 중에 선택

Fig 07. 프로파일러 시작

중지: Stop 버튼 선택

Fig 08. 프로파일러 중지

CPU, Memory, JDBC는 설정을 할 수 있는 기능이 있다. 프로파일링할 대상 클래스나 기타 설정을 할 수 있다. 관심갖는 대상을 한정해서 프로파일링 할 수 있다.

Profiling

프로파일링은 프로그램의 시간 복잡도 및 공간, 함수 호출 주기와 빈도를 측정하여 프로그램 분석 하는 작업이다.

프로파일링을 가지고 튜닝 작업을 아래 처럼 진행할 수 있다.

  1. 프로파일링 측정
  2. 분석을 통해 핫스팟 찾음
  3. 핫스팟 수정
  4. 다시 1번부터 시작

Profile: CPU

CPU 호출에 대한 프로파일링이다. CPU 실행시간, 호출 회수 등의 정보 제공한다.

Fig 09. CPU 프로파일링 화면

Profile: Memory

메모리 사용 프로파일링이다. 사용 메모리량, 객체 정보 제공한다.

Fig 10. 메모리 프로파일링 화면

Profile: JDBC

JDBC 호출에 대한 프로파일링을 할 수 있다. 호출된 쿼리 및 실행 정보 제공한다.

Fig 11. JDBC 프로파이링 화면

Profile: Locks

쓰레드에 대한 프로파일링을 할 수 있다. 실행되는 쓰레드 정보를 확인할 수 있다.

Fig 12. Locks 프로파일링 화면

마무리

프로파일링을 통해서 애플리케이션에 대한 상세한 동작을 분석할 수 있게 해준다. 이를 통해서 문제의 원인을 찾거나 성능 개선을 위한 방법을 찾을 수 있다. visualvm에서 기능은 훌륭하지 않지만 간단하고 쉽게 프로파일링 할 수 있다. 물론 모니터링도 가능하다. 직접 사용해보면 어렵지 않기 때문에 사용을 추천합니다. 부족한 글이지만 도움이 되었으면 하네요. 모두 즐거운 프로파일링하세요. ospace

참고

[1] visualvm official site, https://visualvm.github.io/

[2] https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC%EB%A7%81_(%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)

반응형