행복한 아빠

공짜 Java profiler - JIP (웹 애플리케이션 성능 프로파일링-튜닝) 본문

문제발생시

공짜 Java profiler - JIP (웹 애플리케이션 성능 프로파일링-튜닝)

행복한아빠 2009. 12. 14. 09:09
성능이 안나와 튜닝을 하려고 공짜 profiler를 구하는데 대부분 오래전에 작성한 것이고 잘 돌아가지도 않았습니다. 그중 그나마 최신(?)에 릴리즈되고(2008년 1월) 버전이 높고 간단하게 돌아가는 것을 찾았습니다. 오늘 소개할 것은 JIP이라는 프로파일러 입니다.



환경
여기서는 다음과 같은 환경으로 사용예를 설명합니다.
  • Java: Java5. JVMPI 를 이용하기 때문에 Java5 이상 버전에서 가능합니다.
  • Tomcat 6.0.14 : WAS마다 설정방법이 다를 수 있습니다.
    설치디렉토리는 C:\Tomcat 으로 가정합니다.
  • OS는 Windows로 설명합니다.

다운로드 및 설치
2. 적당한 디렉토리에 풀어넣습니다. 예) C:\Tools\jip-src-1.1.1

프로파일 모드로 WAS 시작
WAS에 테스트할 웹 애플리케이션은 이미 배포되었다고 가정합니다.
WAS를 기동할 때 -javaagent 옵션을 주어야 합니다. Tomcat의 경우 기동하기 전 다음과 같이 하면 됩니다. 

아래 set CATALINA_OPTS 부분은 한줄입니다.

prompt> cd C:\Tomcat\bin   -> tomcat home의 bin 디렉토리로 이동
prompt> set CATALINA_OPTS=-javaagent:C:\Tools\jip-src-1.1.1\profile\profile.jar -Dprofile.properties=C:\Tools\jip-src-1.1.1\profile\webapp.profile.properties
prompt> catalina.bat run
...

기동하기전 프로파일할 대상을 필터링하려면 webapp.profile.properties 중 exclude 를 아래와 같은 예로 수정합니다. 아래는 org, net. com.sun. java. javax 로 시작하는 클래스는 프로파일을 하지 않겠다는 뜻입니다. 우리 관심 대상이 아닌 클래스는 프로파일에서 제외하는게 좋습니다.

...
exclude=org, net, com.sun, java, javax
...


프로파일 시작
webapp.profile.properties 설정은 WAS 기동시 프로파일이 자동으로 되지 않습니다. WAS 기동시 프로파일 정보는 필요없기 때문에 web app은 이런 설정이 좋습니다. WAS 기동이 끝나고 테스트할 기능을 한 두번 수행해보고 다음과 같이 프로파일 기록을 시작합니다.

prompt> cd C:\Tools\jip-src-1.1.1\client
prompt> start.bat localhost 15599

테스트 수행
테스트할 기능을 몇 번 수행합니다. 한번 수행하고 기록을 끝내는 것보다는 여러 번하고 기록하는 것이 분석하기 좋습니다.

프로파일 끝/기록
프로파일을 끝내야 프로파일 기록이 남습니다.  C:\Tools\jip-src-1.1.1\client 디렉토리에서 다음과 같은 명령을 입력합니다.

prompt> finish.bat localhost 15599

그러면 tomcat을 실행했던 bin 디렉토리에 profile.xml 파일이 생길겁니다. C:\Tools\jip-src-1.1.1\client 디렉토리에서 다음과 같은 명령을 입력하여 분석결과를 봅니다.

prompt> jipViewer.bat C:\Tomcat\bin\profile.xml


분석
아래와 같은 화면이 나타날 겁니다. 시간이 많이 걸린 thread를 찾아 call tree를 따라가면 어떤 클래스의 어떤 메소드가 몇번 호출되었는지 얼마나 시간을 소요했는지 알 수 있습니다.



메소드 별로 호출회수나 소요시간을 정렬해서 볼 수 있습니다.



패키지 별로 소요시간을 얼마나 사용했는지 볼 수 있습니다.




Maven jetty 환경에서...
우리는 maven2에 jetty 환경에서 주로 개발을 합니다. maven의 jetty 플러그인으로 하려면 약간의 작업이 필요합니다.
우선 아래 첨부된 파일을 C:\Tools\jip-src-1.1.1\
src\com\mentorgen\tools\profile\instrument\clfilter 디렉토리에 넣고 ant로 컴파일합니다.


prompt> cd C:\Tools\jip-src-1.1.1
prompt> ant dist

위와 같이 하면 client 디렉토리에 있던 jipViewer.jar를 삭제하니 profile 디렉토리에 있는 jipViewer.jar 파일을 client에 복사하세요. 그래야 분석결과 Viewer를 실행할 수 있습니다.

그리고 webapp.profile.properties의 ClassLoaderFilter 필터 부분을 아래와 같이 수정합니다.

...
#ClassLoaderFilter.1=com.mentorgen.tools.profile.instrument.clfilter.WebAppClassLoaderFilter
#ClassLoaderFilter.2=com.mentorgen.tools.profile.instrument.clfilter.StandardClassLoaderFilter
ClassLoaderFilter.1=com.mentorgen.tools.profile.instrument.clfilter.JettyClassLoaderFilter
...

maven jetty:run 하기 전 -javaagent 옵션을 주기 위해 다음과 같은 환경변수를 잡습니다. 한줄입니다.

prompt> set MAVEN_OPTS=-javaagent:C:\Tools\jip-src-1.1.1\profile\profile.jar -Dprofile.properties=C:\Tools\jip-src-1.1.1\profile\webapp.profile.properties
... 그리고 jetty 실행...
prompt> mvn jetty:run

나머지는 위와 동일합니다. 슬기롭게 튜닝합시다. ^^


16 Comments
댓글쓰기 폼