Synchronized로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

Synchronized로 검색한 결과
등록일:2008-04-15 11:21:16
작성자:
제목:Eclipse 3.3.2 과 TPTP 4.4.1 을 이용한 Profiling (Eclipse Java Project)


문서의 목적

Eclipse 3.3.2 와 TPTP 4.4.1 의 Integrated Agent Controller 를 이용해서 Eclipse 에서 만든 Java Application 을 Profiling 하는 방법을 알아본다.


TPTP 4.4.1 소개

TPTP 는 Test and Performance Tools Platform 의 약자로, Eclipse 에서 프로그래밍 언어에 상관없이 Test 와 Profiling 을 할 수 있는 기반을 만들어주는 Eclipse 의 프로젝트이다.

TPTP 는 최근 버전에서 Integrated Agent Controller 기능을 탑재하면서 Eclipse 에서 만든 자체 프로젝트의 경우 별도의 조작없이 프로그램 실행과 동시에 Profiling 을 수행할 수 있게 되었다.

TPTP 4.4.1 의 Profiling 기능은 다음과 같은 3가지 모드의 Profiler 로 나뉘며, 각 모드는 한 번의 Profiling 기능수행중에 동시에 진행되지 않는다. 다른 모드로 변경하기 원한다면 별도의 Profiling 을 진행해야 한다.

  • Execution Time Analysis
  • Memory Analysis
  • Thread Analysis

NetBeans 의 Profiler 보다는 나은 성능을 보여주지만, YourKit 같은 상용툴에는 아직 미치지 못한다.


Ecipse 3.3.2 와 TPTP 4.4.1 설치하기

Eclipse 3.3.2 를 쓰기 위해서 다음 URL 에 있는 Eclipse for RCP/Plug-in Developers 를 다운받아서 설치한다.

http://www.eclipse.org/downloads/

이 글에서는 다음 화면과 같이 c:\eclipse 에 설치한 것으로 간주한다.


TPTP 4.4.1 은 Eclipse 의 update 기능으로 설치한다.

우 선, 메너에서 Help > Software Updates > Find and Install 을 선택해서 "Install/Update" 창을 띄운 후, "Search for new features to install" 옵션을 선택하고 Next 버튼을 누른다.

그 다음, "Europa Discovery Site" 을 선택하고 Next 버튼을 누르고, "Update site mirrors" 창에서 적절한 미러 사이트를 선택한다. (이 글을 쓰는 시점에서 Daum 측 미러사이트는 EMF 업데이트가 안되는 문제가 있어 KAIST 측 미러사이트로 진행했다.)

이제 다음 화면과 같이 Updates 창에서 "Testing and Performance" 과 "Select Required" 버튼을 누르고 Next 버튼을 누른다.


이후 안내를 따라 진행하다가 설치가 끝난 후 Eclipse 를 재시작시킨다.


Profiliing 할 Java 프로젝트 준비하기

먼저, Integrated Agent Controller 는 기본으로 비활성화되어 있다.

이를 활성화하기 위해 다음 그림과 같이 Preferences - Agent Controller - Integrated Agent Controller 화면에서 Enable 을 선택하고 OK 버튼을 누른다.

 


이제, 다음과 같이 LookAtMe 라는 Java 프로젝트를 만든다.


소스코드는 다음과 같다.

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();
    }
}


Window - Profile... 메뉴를 선택해서 다음 화면과 같이 LookAtMe 라는 Profile Configuration 을 만든다.


다음 화면과 같이 Monitor 탭에서 3가지 Profiling 모드중에서 하나를 선택할 수 있다. 우선은 Execution Time Analysis 를 선택해둔다.


위 화면에서 Profile 버튼을 누르거나, 다음 화면과 같이 Profile 실행버튼에서 LookAtMe Configuration 을 선택해서 Profiling 을 시작한다.


Profiling 하기 - Execution Time Analysis

이 전에 만든 LookAtMe_remote 라는 Profile Configuration 을 실행하면 Profiling and Logging Perspective 로 바뀌면서 Monitor 탭에서 설정했던 대로 Execution Time Analysis 를 할 수 있다.

다음 화면은 Execution Time Analysis 를 한 직후의 모습이다.


왼쪽 트리에서 방금 실행한 Profile 세션에 있는 Execution Time Analysis 를 더블클릭하면 다음 화면과 같이 Session summary 를 볼 수 있다.


하단에 있는 탭을 이용하면 다른 정보들을 얻을 수 있는데, 우선, Filter 설정을 없애야 모든 정보를 볼 수 있으므로 다음 화면과 같이 Execution Statistics 에서 No Filter 설정을 한다.


다음 화면은 No Filter 설정이 된 Execution Statistics 이다.


다음 화면은 Call Tree 에서 LookAtMe(long) 생성자를 선택한 모습이다.


다음 화면은 Method Invacation Details 에서 LookAtMe(long) 생성자를 보는 모습이다.


다음 화면은 Method Invation 에서 getCount() 메소드를 보는 모습이다.


왼쪽 트리에서 방금 실행한 Profile 세션에 있는 Execution Time Analysis 를 더블클릭하지 않고, 오른쪽 마우스버튼을 이용하면 다른 형식으로 화면을 열 수도 있다.

다음 화면은 Execution Flow 를 보는 모습이다.


다음 화면은 UML2 Class Interactions 를 보는 모습이다.


UML2 Class Interactions 화면에서 빨간 색 부분에 마우스 포인터를 대면 다음 화면가 같이 실행시간이 표시된다. 빨간 색이 짙을 수록 실행시간이 긴 것을 나타낸다.


다음 화면은 Class Thread Interactions 화면을 보는 모습이다.


이 모든 결과는 현재 Profiling 되는 실시간 값이며, Profiling 을 중지하면 중지한 순간까지의 결과를 볼 수 있다.


Profiling 하기 - Memory Analysis

다 음 화면은 LookAtMe Configuration 의 Monitor 탭에서 Memory Analysis 를 선택하고 실행한 뒤, lookatme.LookAtMe 클래스에 대한 Memory Statistics 를 보는 모습이다. (오른쪽 위에서 클래스 대신 패키지 기준으로 보도록 선택했다.)


다음 화면은 이전 화면에서 lookatme.LookAtMe 클래스를 더블클릭하거나 이 클래스가 선택된 상태에서 하단 탭의 Allocation Details 를 선택한 모습이다.


이 화면들에서 각 컬럼의 의미는 다음과 같다.

  • Live Instances
    • GC 되지 않고 살아있는 인스턴스
  • Active Size (bytes)
    • 해당 인스턴스 자체가 Heap 에서 차지하고 있는 용량
  • Total Instances
    • GC 된 인스턴스와 GC 되지 않은 인스턴스의 총합
  • Total Size (bytes)
    • 해당 인스턴스에 대해 GC 된 용량과 살아있는 용량을 합한 용량
  • Avg. Age
    • 한 번의 GC 에서 살아남으면 Age 가 하나 증가한다.

테스트 프로그램에 대해 Profiling 하기 - Thread Analysis

다 음 화면은 LookAtMe_remote 의 Monitor 탭에서 Thread Analysis 를 선택하고 실행한 뒤, Thread Statistics 를 보는 모습이다. (상단의 Show Call Stack 버튼을 누른 상태이다.)


다음 화면은 Threads Visualizer 를 보는 모습이다.



출처 : http://mindwing.kr/131