Java 프로파일러를 이용한 메서드 수행시간 비교

gyu·2024년 4월 2일

Java 프로파일러 툴을 이용해서 메서드의 수행시간을 간단하게 비교해보았다.
툴은 Visual VM, YourKit을 사용하였다.
여기서 프로파일러가 무엇을 의미하는지 잠깐 알아보고 넘어가자.

프로파일러란?

  • 애플리케이션 성능을 측정하고 분석하기 위해 사용되는 도구
  • CPU 사용량, 메모리 사용량, 스레드 상태 등을 모니터링
  • 개발자가 코드 실행 시간을 최적화 하고 메모리 누수를 찾아내며, 동시성 문제를 해결할 수 있음

테스트 준비

우선 스프링부트 웹 애플리케이션에서 Controller와 Service를 다음과 같이 구성하였다.
Slack 메세지 전송 API를 호출하는 메서드, 단순히 for문을 돌며 Dto 객체를 5만개 생성하는 메서드를 수행하여 프로파일러 툴에서 어떻게 기록되는지 확인해본다.

ProfilerController.java

ProfilerService.java


visual VM 프로파일러 수행 결과

  • Total Time: 메서드의 총 실행시간을 의미하며, 내부에서 호출하는 메서드의 실행시간까지 포함한다.
  • Self Time: 메서드의 실행시간을 의미하며, 내부에서 호출한 메서드의 실행시간은 포함하지 않는다.
  • invocations: 메서드의 호출 횟수를 의미한다.

loop 메서드는 320ms, sendSlackMessage 메서드는 1,368ms만에 수행되었다.
Slack API 호출 로직이 단순 for문을 수행하는 로직보다 약 4배정도 오래 걸리는 것을 확인할 수 있다.

YourKit은 IntelliJ와 연동해서 사용 가능하다.
아래 버튼을 클릭하면 애플리케이션이 실행되고 YourKit 화면이 실행되면서 CPU Profiling 모드로 진입한다.

VisualVM에서 측정된 결과와 마찬가지로 수행시간이 Slack API 호출 메서드가 for문 수행 메서드의 약 4배로 측정된걸로 확인된다.

이번에는 단순히 2개의 메서드의 수행 시간을 비교하려는 목적으로 사용하였지만,
개인 프로젝트나 회사에서 진행하는 프로젝트에 유독 시간이 오래 걸리는 로직이나 병목이 의심되는 지점을 찾는 데도 유용하게 사용될 것 같다.

0개의 댓글