IntelliJ 프로파일러 맛보기(java flight recorder, async profiler)

햄도·2022년 3월 1일
0
post-thumbnail

파이썬도 cProfile로 간단하게 프로파일링을 할 수 있으니, 자바도 비슷한 툴이 있지 않을까? 하고 찾아보니 intelliJ에서 java flight recorder(jfr), async profiler라는 툴을 제공하고 있었다.

물론 다른 툴도 많은 것 같았지만 새로 설치해서 사용해보기에는 라이센스 등의 문제를 알아보기 번거로워서 일단 추가 설치 없이 사용해볼 수 있는 툴을 사용해보기로 했다.

그런데 jfr은 내가 개발한 메소드 호출이 잡히지 않아 온갖 자료를 다 찾아봤다.. jfr은 특정 이벤트가 발생할 때마다 샘플링을 하는데, 내가 원하는 부분을 이벤트로 등록하려면 따로 커스텀 이벤트를 추가하고 프로파일링할 부분에 해당 이벤트를 호출하는 로직을 추가해야 하는 것 같았다.

jfr로 프로파일링한 타임라인이다. 딱봐도 샘플이 불규칙하게 수집된다.

대신 async profiler를 사용하니 내가 원하는 부분까지 샘플링이 되었다. async profiler는 옵션을 통해 샘플링 주기를 설정해줄 수 있다. 대신 샘플링을 자주 해서 오버헤드가 걸리는지 수행시간이 늘어났고, 심지어 더 무거운 작업을 수행하려니 메모리가 터져버렸다 😨

애초에 자바에선 이런식으로 프로파일링을 잘 하지 않는건지, 아니면 다들 운영 서버에만 설치해서 사용하는 유료 툴을 쓰는건지 정보를 찾기가 힘들었다.

현재까지 찾아본 바로는 jfr을 이용해 프로파일링을 원하는 로직에서 커스텀 이벤트를 호출해주는 방법이 그나마 좋은 것 같지만 이것도 코드에 의존성이 생긴다는 게 딱히 마음에 들지 않는다. 테스트코드에 추가하는 정도는 괜찮으려나..

참고

profile
developer hamdoe

0개의 댓글