Eclipse + TPTP (Eclipse Test & Performance Tools Platform) 에 이어서 원격지에 있는 WAS 를 프로파일링 해봅시다.
Ubuntu 11.04 32bit 에서 테스트 하겠습니다.
$ uname -a
Linux nerv.kr 2.6.38-8-generic-pae #42-Ubuntu SMP Mon Apr 11 05:17:09 UTC 2011 i686 i686 i386 GNU/Linux
http://dev.eclipse.org/viewcvs/viewvc.cgi/platform/org.eclipse.tptp.platform.agentcontroller/src-native-new/packaging_md/linux/getting_started.html?root=TPTP_Project&view=co
Setting Up Agent Controller
서버에 심어둘 Agent Controller(AC)를 다운로드 합니다.
http://www.eclipse.org/tptp/home/downloads/
다운로드 받아서 압축을 풉니다. (전 "opt/tptpAC" 에 풀었습니다.)
bin 디렉토리의 SetConfig.sh 스크립트를 한번 실행해줍니다.
1. JVM 위치 : 디폴트 값이 맞다면 그냥 엔터로 넘기시면 됩니다.
2. 네트워크 엑세스 : ALL
3. 보안 사용 : 패스
/opt/tptpAC/bin# ./SetConfig.sh
Specify the fully qualified path of "java" (e.g. /usr/java1.4/jre/bin/java):
Default>"/usr/lib/jvm/java-6-sun-1.6.0.26/jre/bin/java" (Press <ENTER> to accept the default value)
New value>/usr/lib/jvm/java-6-sun/bin/java
Network access mode (ALL=allow any host, LOCAL=allow only this host, CUSTOM=list of hosts):
Default>"LOCAL" (Press <ENTER> to accept the default value)
New value>ALL
Security enabled. (true/false):
Default>"FALSE" (Press <ENTER> to accept the default value)
New value>
/opt/tptpAC/bin#
Agent Controller Server 를 실행합니다. (끄는건 ACStop.sh)
/opt/tptpAC/bin# ./ACStart.sh
Starting Agent Controller.
ACServer started successfully.
Checking Agent Controller Installation
한번 테스트 해봅시다.
/opt/tptpAC/bin# ./SampleClient
Connected to the Agent Controller on "localhost" at port number 10006
The Time Collector Agent ID: 103
Established a data channel with the agent.
Sending 5 Hello messages over data channel to TimeCollector ...
Start the TimeCollector ...
Incoming data: Hello from Time Collector Agent - Count 0
Incoming data: Hello from Time Collector Agent - Count 1
Incoming data: Hello from Time Collector Agent - Count 2
Incoming data: Hello from Time Collector Agent - Count 3
Incoming data: Hello from Time Collector Agent - Count 4
Incoming data: Hello from Time Collector Agent - Count 5
Stop the TimeCollector ...
Incoming data: Hello from Time Collector Agent - Count 6
Incoming data: Hello from Time Collector Agent - Count 7
Incoming data: Hello from Time Collector Agent - Count 8
Incoming data: Hello from Time Collector Agent - Count 9
All finished
Press enter key to exit...
/opt/tptpAC/bin#
포트가 열려 있는지 확인 해봅시다.
# netstat -n -a | grep 10002
tcp6 0 0 :::10002 :::* LISTEN
tcp6 0 0 ***.***.***.***:10002 ***.***.***.***:50412 ESTABLISHED
# netstat -n -a | grep 10005
tcp6 0 0 :::10005 :::* LISTEN
# netstat -n -a | grep 10006
tcp6 0 0 :::10006 :::* LISTEN
tcp6 0 0 ***.***.***.***:10006 ***.***.***.***:50414 ESTABLISHED
Profiling a Java Application
이제 톰켓을 프로파일링 모드로 구동시켜 봅시다.
시작 스크립트 부분에 아래와 같이 환경변수를 세팅해 줍니다.
# 임시 디렉토리 설정(옵션)
export TEMP="/tmp"
export TMP="/tmp"
export TPTP_AC_HOME="/opt/tptpAC"
export JAVA_PROFILER_HOME="${TPTP_AC_HOME}/plugins/org.eclipse.tptp.javaprofiler"
export PATH="${JAVA_PROFILER_HOME}:${TPTP_AC_HOME}/bin:${PATH}"
export LD_LIBRARY_PATH="${JAVA_PROFILER_HOME}:${TPTP_AC_HOME}/lib:${LD_LIBRARY_PATH}"
그리고 자바 옵션에 아래와 같이 추가합니다.
프로파일링의 종류는 3가지가 있습니다.
- CGProf : Execution time analysis.
- HeapProf : Object allocation/heap analysis.
- Thread : Thread analysis.
-agentlib:JPIBootLoader=JPIAgent:server=controlled;CGProf
저의 구동 스크립트는 CATALINA_OPTS 변수를 사용하더군요 ㅎㅎ
export CATALINA_OPTS="$CATALINA_OPTS -agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf"
※ 만약 JPIAgent 를 찾을 수 없다거나 에러가 난다면 앞뒤로 '(쿼터)를 추가해 봅시다.
OS 종류에 따라 좀 틀려서.. ㅠ_ㅠ
export CATALINA_OPTS="$CATALINA_OPTS '-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf'"
옵션이 제대로 박혀 들어가 있는지도 확인 해봅시다.
# ps -ef | grep tomcat6
tomcat6 5899 1 2 20:12 ? 00:01:15 /usr/lib/jvm/java-6-sun/bin/java -Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms256m -Xmx512m -agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf -Djava.endorsed.dirs=/usr/share/tomcat6/endorsed -classpath /usr/share/tomcat6/bin/bootstrap.jar -Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 -Djava.io.tmpdir=/tmp/tomcat6-tmp org.apache.catalina.startup.Bootstrap start
이제 이클립스에서 원격으로 붙어서 상태를 확인 해봅시다.
물론 TPTP 플러그인은 깔려 있어야 합니다. ^^;;
Run - Profile Configurations...
Attach to Agent 를 추가하고 원격으로 볼 주소를 Default Hosts 에 추가합니다.
Agents 탭에 보면 떠있는 프로파일링이 보입니다. (바로 안보이면 Refresh 버튼 한번 클릭!)
선택 후 "Profile" 버튼을 클릭합니다.
"Profiling and Logging" 퍼스펙티브로 이동해서 보면 "Profiling Monitor" 탭에 등록한 호스트가 보일겁니다.
더블클릭해서 보면 프로파일링 결과가 나옵니다. ㅎㅎ
생각보다는 어렵지 않네요...