본문 바로가기

Programing/Java

java profiling (자바 프로파일링) YourKit 사용 방법


java application 실행 후 시간이 흐르면 cpu load가 올라가서 java profiling을 진행중이다. 

나는 YourKit(http://www.yourkit.com/purchase/index.jsp)을 사용했고 리눅스 장비에서 실행되는 java program에 YourKit agent를 붙여 실행하고 
내 윈도우 desktop에서 프로파일링을 진행했다. 

YourKit은 메모리(MEMORY), CPU, GC(garbage collection)등을 확인해 볼 수 있도록 지원한다. 



[프로파일링 방법]

링크를 따라가 보면 프로파일을 진행하는 방법을 가르쳐 준다. 
http://www.yourkit.com/docs/index.jsp

Java Profiler


난 CPU profiling을 진행할 것이기 때문에 Demo에서 첫번째를 보면 된다.  



[비용]

Yourkit은 license 비용을 지원해야하지만 오픈소스 프로젝트의 경우에는 무료로 지원해 준다. 
(http://www.yourkit.com/purchase/index.jsp)에서 Open Source tab을 확인 




[ 다운로드 ]

라이브러리는 여기(http://www.yourkit.com/download/index.jsp)서 다운로드 가능하다. 
아래와 같이 버전별로 되어 있으니 필요한 것을 잘 선택

Windows
Download and run installer (25M)
 
Mac OS X (Intel)
Download and unpack zipped application (5M)
Linux
Download tar.bz2 archive (66M)
Unpack: tar xfj <archive name>.tar.bz2
Launch bin/yjp.sh
 
Solaris (SPARC and X86)
Download ZIP archive (15M)
Unpack it and launch bin/yjp.sh
 
FreeBSD
Download ZIP archive (15M)
Unpack it and launch bin/yjp.sh
 
HP-UX (IA64, 32- and 64-bit)
Download ZIP archive (15M)
Unpack it and launch bin/yjp.sh
AIX
AIX (ppc and ppc64)
Download ZIP archive (17M)
Unpack it and launch bin/yjp.sh




[library path 등록 및 실행]

다운로드 받은 것을 보면 yjp-x.x.xx 및에 bin 폴더가 있는데 각자 os맞는 library를 path에 등록 시켜준다. 



path 잡는 거는 리눅스라면 이런식이 될 거고 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home1/svc/yjp-7.0.12/bin/linux-amd64
윈도우라면 환경변수에 넣으면 될 거고 

실행은 Application 이름이 MyApplication이라면 아래와 같이 하면 된다. 
/home1/common/jdk1.6.0_24/bin/java -agentlib:yjpagent=port=20302  MyApplication 

어플리케이션에서 이런 로그를 벹을 것이다. 

[YourKit Java Profiler 7.0.12] Using JVMTI (19.1-b02;Sun Microsystems Inc.;mixed mode, sharing;Linux;64 bit JVM)
[YourKit Java Profiler 7.0.12] Profiler agent is listening on port 20302...
[YourKit Java Profiler 7.0.12] *** HINT ***: To get profiling results, connect to the application from the profiler UI

java application에 YourKit agent가 붙은 것이다. 
 


[profiling 진행] 

윈도우용  인스톨러를 받았아서 설치를 했으면  프로그램에 아래 같이 뜰 것이다. 


Windows
Download and run installer (25M)
 
 

YourKit 실행 아이콘





실행하면 아래와 같이 뜬다.
나는 원격으로 linux장비에서 java application을 실행했으므로 Connect to remote application...을 고른다. 



그럼 원격 주소를 입력하라고 뜨는데 호스트명:포트번호를 입력한다. 
포트번호는 아까 application실행시 주었던 번호다.  /home1/common/jdk1.6.0_24/bin/java -agentlib:yjpagent=port=20302  MyApplication 

즉, application을 실행시킨 장비의 ip가 10.8.8.12이면

 이렇게 하고 Connect!!!


저위에 확성화 되어있는 Start CPU Profiling 버튼을 투르면 아래 창에 각 thread들이 cpu를 점유하는 percentage와 각 function의 실행횟수를 확인 할 수 있다. 
function call횟수를 보려면 저 바로 위 사진에서 Sampling이 아닌 Tracing으로 놓고 실행 버튼을 눌러야한다. 

CPU를 사용하는 시간이 꼭 CPU를 많이 쓴다고 보기는 어렵다. IO waiting 중일 수도 있기 때문이다. 

프로파일링을 하는 방법은 아까 맨위에서 [프로파일링 방법] 에서 소개해준 강좌를 한번 보기 바란다.