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
- YourKit Java Profiler 10 Help (online) (or ZIP archive for offline browsing)
- Knowledge base
- Forums
- Demo:
- CPU profiling (duration 8 min)
- J2EE profiling (duration 5 min)
- Finding a memory leak (duration 10 min)
- Profiling excessive garbage allocations (duration 6 min)
난 CPU profiling을 진행할 것이기 때문에 Demo에서 첫번째를 보면 된다.
[비용]
Yourkit은 license 비용을 지원해야하지만 오픈소스 프로젝트의 경우에는 무료로 지원해 준다.
(http://www.yourkit.com/purchase/index.jsp)에서 Open Source tab을 확인
[ 다운로드 ]
라이브러리는 여기(http://www.yourkit.com/download/index.jsp)서 다운로드 가능하다.
아래와 같이 버전별로 되어 있으니 필요한 것을 잘 선택
|
|
||
|
|
||
|
|
||
AIX |
|
[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 진행]
윈도우용 인스톨러를 받았아서 설치를 했으면 프로그램에 아래 같이 뜰 것이다.
|
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 중일 수도 있기 때문이다.
프로파일링을 하는 방법은 아까 맨위에서 [프로파일링 방법] 에서 소개해준 강좌를 한번 보기 바란다.
'Programing > Java' 카테고리의 다른 글
Java HTML Parser (0) | 2013.06.25 |
---|---|
Java pipeline framework (자바 파이프라이닝 처리) (0) | 2011.09.01 |
java remote debugger, 자바 원격 디버깅 (0) | 2011.08.29 |
java multi-thread, thread pool 사용 (0) | 2011.07.29 |
Mysql Connection pooling (0) | 2011.06.24 |