Eclipse 3.3.2 와 TPTP 4.4.1 을 이용해서 원격 JVM 에서 실행되고 있는 Java Application 을 Profiling 하는 방법을 알아본다.
이 문서는 'Eclipse 3.3.2 과 TPTP 4.4.1 을 이용한 Profiling (Eclipse Java Project)' 문서를 통해 TPTP 를 Profiler 로 먼저 써보았다고 가정한다. 이 문서는 http://mindwing.kr/131 을 참조한다.
우선, Profiling 을 할 테스트 프로그램을 만들어야 하는데, 이 문서에서는 다음 소스코드를 이용해서 C:\Users\handan\tptp\LookAtMe\bin\lookatme 에 클래스 파일을 만든 것으로 간주한다.
(별도로 Profiling 할 프로그램이 있다면 그것을 써도 된다.)
package lookatme;
public class LookAtMe extends Thread
{
private long sleepTime;private int count;
private static int getCount;
LookAtMe(long sleepTime)
{
this.sleepTime = sleepTime;count = getCount();
}private static int getCount()
{
synchronized (LookAtMe.class)
{
return ++getCount;
}
}public void run()
{
while (true)
{
System.out.printf("%d: %d\n", count, sleepTime);try
{
sleep(sleepTime);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}public static void main(String[] args)
{
new LookAtMe((System.currentTimeMillis() % 3000) + 100).start();
new LookAtMe((System.currentTimeMillis() % 3000) + 300).start();
new LookAtMe((System.currentTimeMillis() % 3000) + 500).start();
new LookAtMe((System.currentTimeMillis() % 3000) + 700).start();
new LookAtMe((System.currentTimeMillis() % 3000) + 900).start();
}
}
다음 화면과 같이 컴파일한다.
Eclipse 내에서 실행되는 Application 을 profiling 하기 위해서는 Integrated Agent Controller 를 쓰면 되기 때문에 Eclipse 외에 별도의 설치가 필요없다.
하 지만, Remote site 에서 실행되는 Application 을 Profiling 하기 위해서는 Remote site 에 별도의 TPTP Agent Controller 를 설치해줘야 한다. (이 문서에서는 하나의 컴퓨터에서 모두 설정하지만, Eclipse 가 실행되는 환경과 Remote site 는 별개의 컴퓨터라고 샘각해야 한다.)
Remote site 에 TPTP Agent Controller 를 설치하려면, 다음 URL 에서 Remote site 의 환경에 맞는 TPTP 를 설치한다.
http://www.eclipse.org/tptp/home/downloads/
이 글에서는 다음 화면과 같이 C:\tptpAC 에 'WINDOWS-IA32' 를 설치했다고 가정한다.
다음 두 가지 시스템 프로퍼티 설정을 한다.
처음 실행하는 것이라면 다음과 같이 커맨드 창을 열어서 SetConfig 를 실행하고, 기본설정값을 설정하기 위해 엔터키를 계속 눌러준다.
이제 Remote site 에서 Agent Controller 를 실행해야 하는데, 우선 커맨드 창에서 테스트 프로그램이 설치된 디렉토리인 C:\tptpTest 디렉토리로 이동한다.
다음과 같이 입력해서 결과값을 확인한다.
[C:\tptpTest] java -agentlib:JPIBootLoader=JPIAgent:help;CGProf
@(#)JVMTI Agent version 1.0.0.1
Usage:
-agentlib:JPIBootLoader=JPIAgent[:[help]|[<option>=<value>, ...]];<profiler>Where:
help Displays this message
<option>=<value> Command line options (see below)
<profiler> The profiler to launch:
CGProf Execution time analysis
HeapProf Memory analysis
ThreadProf Thread analysisSupported option names and values:
server=standalone|enabled|controlled
file=<file> Output file (default is trace.trcxml)
Only applicable when server=standalone
filters=<file> Filter definition file (default is filters.txt)
Only applicable when server=standalone
profiler=<file> Profiling options file (default is jvmti.pro)
Only applicable when server=standaloneExamples
Execution time analysis in standalone mode:
java -agentlib:JPIBootLoader=JPIAgent:server=standalone,file=log.trcxml;CGProf <
Java class file>Memory analysis in controlled mode:
java -agentlib:JPIBootLoader=JPIAgent:server=controlled;HeapProf <Java class fil
e>Error occurred during initialization of VM
agent library failed to init: JPIBootLoader
이렇게 안내문이 출력되면 설정은 잘 된것이다.
추가로, 다음과 같이 Eclipse 없이 독자적으로 Profiling 을 하는 Standalong 모드로 실행해서 Profiling 이 잘 되는지를 확인해본다.
[C:\tptpTest] java -agentlib:JPIBootLoader=JPIAgent:server=standalone;CGProf loo
katme.LookAtMe
3: 3371
5: 3772
2: 3171
1: 2970
4: 3572
1: 2970
2: 3171
3: 3371
4: 3572
5: 3772
1: 2970
2: 3171
.....
참고로, 주황색 부분인 CGProf 는 Profiling 모드를 지정하는 것으로 다음과 같은 값이 가능하다.
그리고, Agent Controller 는 TCP 포트 10002, 10005, 10006 을 사용하므로, 필요하다면 이 포트를 이용할 수 있게 관련 설정등을 해준다.
이 제 Eclipse 의 TPTP 에서 Remote site 의 테스트 프로그램으로 접속할 수 있도록 다음과 같이 TPTP Agent Controller 를 실행한다. 우선은 Execution Time Analysis 모드로 해본다.
[C:\tptpTest] java -agentlib:JPIBootLoader=JPIAgent:server=controlled;CGProf loo
katme.LookAtMe
이제 Eclipse 에서 다음 화면과 같이 Attach to Agent 로 Profiling Configuration 을 만든다.
화면에서 localhost:10002 포트가 잡힌 것은 Eclipse 를 실행하는 컴퓨터에서 TPTP Agent Controller 를 설치했기 때문으로 실제로는 해당 서버를 지정해야 한다.
이제 Test Connection 을 눌러서 다음 화면과 같이 잘 연결됨을 확인한다.
Agent 탭으로 가서 Refresh 버튼을 누르면 다음과 같이 이미 설정된 Execution Time Analysis 용 TPTP Agent 가 보이는 것을 확인할 수 있다.
이제 Profile 버튼을 눌러서 바로 Profiling 을 실행할 수 있다.
다음 화면은 Eclipse 상에서 Profiling 이 실행되는 모습이다.
다음 화면은 TPTP Agent Controller 를 실행한 콘솔창의 모습으로 프로그램이 실행되고 있는 것을 알 수 있다.
이제 HeapProf 과 ThreadProf 에 대한 Profiling Configuration 을 추가하고, 적절하게 Remote site 에서 Agent Controller 를 실행해준다.
다음 화면은 HeapProf 로 실행한 Eclipse 의 모습이다.
다음 화면은 ThreadProf 로 실행한 Eclipse 의 모습이다.
출처 : http://mindwing.kr/132
SSISO Community