반응형

개발 도구

  1. Eclipse : http://www.eclipse.org/
  2. Netbean : http://www.netbeans.org/community/releases/60/index.html
  3. Firebug : http://www.getfirebug.com/

소스코드 관리

  1. CVS : http://www.cvshome.org
  2. Subversion : http://subversion.tigris.org
  3. MS Visual SourceSafe
  4. BitKeeper : http://www.bitkeeper.com
  5. ClearCase : http://www-306.ibm.com/software/awdtools/clearcase/

빌드 스크립트 도구

  1. make : http://source.redhat.com/cygwin
  2. Automake : http://www.gnu.org/software/automake
  3. Ant : http://ant.apache.org
  4. NAnt : http://nant.sourceforge.net
  5. Groovy : http://groovy.codehaus.org
  6. Rake : http://rake.rubyforge.org/  
  7. SCons : http://www.scons.org/

빌드 시스템

  1. Mavenhttp://maven.apache.org 
  2. Maven2 : http://maven.apache.org/maven2/index.html

CI 도구 (Continuous integration )

  1. CruiseControl : http://cruisecontrol.sourceforge.net
  2. CruiseControl .NET : http://sourceforge.net/projects/ccnet
  3. DamageControl : http://damagecontrol.codehaus.org
  4. AntHill : http://www.urbancode.com/projects/anthill
  5. Continuum : http://maven.apache.org/continuum
  6. LuntBuild : http://luntbuild.javaforge.com/  
  7. Buildix : http://buildix.thoughtworks.com/  
  8. Hudson : https://hudson.dev.java.net/  (직관적이고 사용법이 쉬움)

이슈 추적 도구

  1. Bugzilla : http://www.bugzilla.org
  2. JIRA : http://www.atlassian.com/software/jira/default.jsp
  3. FogBugz : http://www.fogcreek.com/FogBugz
  4. PR-Tracker : http://www.prtracker.com  
  5. Trac : http://trac.edgewall.org/

테스트 프레임워크

  1. JUnit : http://www.junit.org
  2. NUnit : http://www.nunit.org
  3. xUnit.NET : http://www.codeplex.com/xunit
  4. MbUnit : http://www.mbunit.org
  5. HTMLUnit : http://htmlunit.sourceforge.net
  6. HTTPUnit : http://httpunit.sourceforge.net
  7. JWebUnit : http://jwebunit.sourceforge.net
  8. Cobertura : http://cobertura.sourceforge.net
  9. Clover : http://www.cenqua.com/clover  
  10. Cactus : http://jakarta.apache.org/cactus/
  11. Emma : http://emma.sourceforge.net/
  12. Fit : http://fit.c2.com
  13. Fitness : http://fitnesse.org  
  14. Watir : http://wtr.rubyforge.org
  15. Systir : http://atomicobject.com/systir.page
  16. AUT : http://aut.tigris.org/
  17. UnitTest++ : http://unittest-cpp.sourceforge.net/  
  18. TestNG : http://testng.org/doc/  
  19. CppUnit : http://sourceforge.net/projects/cppunit  
  20. CppUnit2 : http://cppunit.sourceforge.net/cppunit-wiki/CppUnit2  
  21. Selenium : http://www.openqa.org/
  22. Agitar : http://www.agitar.com/  
  23. JTest : http://www.parasoft.com/jsp/home.jsp  
  24. PushToSoft : http://www.pushtotest.com/  
  25. Eclemma : http://www.eclemma.org/

프로젝트 관리

  1. OpenProj : http://openproj.org/openproj 
  2. dotproject : http://www.dotproject.net/
  3. Mantis : http://www.mantisbt.org/

커뮤니케이션 도구, 위키

  1. MoinMoin : http://moinmoin.wikiwikiweb.de/
  2. Confluence : http://www.atlassian.com/software/confluence/
  3. TWiki : http://twiki.org/
  4. SocialText : http://www.socialtext.com/  
  5. Springnote : http://www.springnote.com/ko

성능분석

  1. ANTS Load : http://www.red-gate.com/products/ants_load/index.htm  
  2. JunitPerf : http://www.clarkware.com/software/JUnitPerf.html  
  3. Jmeter : http://jakarta.apache.org/jmeter/

기타

  1. Structure101 : http://www.headwaysoftware.com/index.php  
  2. FreeMind : http://freemind.sourceforge.net/wiki/index.php/Main_Page  
  3. Capistrano : http://manuals.rubyonrails.com/read/book/17


 

출처 :   개발이 좋아 개발자가된 많은 사람들에게 말하고 싶은 이야기. by k16wire
           http://moai.tistory.com/notice/270 

반응형

개발 도구

  1. Eclipse : http://www.eclipse.org/
  2. Netbean : http://www.netbeans.org/community/releases/60/index.html
  3. Firebug : http://www.getfirebug.com/

소스코드 관리

  1. CVS : http://www.cvshome.org
  2. Subversion : http://subversion.tigris.org
  3. MS Visual SourceSafe
  4. BitKeeper : http://www.bitkeeper.com
  5. ClearCase : http://www-306.ibm.com/software/awdtools/clearcase/

빌드 스크립트 도구

  1. make : http://source.redhat.com/cygwin
  2. Automake : http://www.gnu.org/software/automake
  3. Ant : http://ant.apache.org
  4. NAnt : http://nant.sourceforge.net
  5. Groovy : http://groovy.codehaus.org
  6. Rake : http://rake.rubyforge.org/  
  7. SCons : http://www.scons.org/

빌드 시스템

  1. Mavenhttp://maven.apache.org 
  2. Maven2 : http://maven.apache.org/maven2/index.html

CI 도구 (Continuous integration )

  1. CruiseControl : http://cruisecontrol.sourceforge.net
  2. CruiseControl .NET : http://sourceforge.net/projects/ccnet
  3. DamageControl : http://damagecontrol.codehaus.org
  4. AntHill : http://www.urbancode.com/projects/anthill
  5. Continuum : http://maven.apache.org/continuum
  6. LuntBuild : http://luntbuild.javaforge.com/  
  7. Buildix : http://buildix.thoughtworks.com/  
  8. Hudson : https://hudson.dev.java.net/  (직관적이고 사용법이 쉬움)

이슈 추적 도구

  1. Bugzilla : http://www.bugzilla.org
  2. JIRA : http://www.atlassian.com/software/jira/default.jsp
  3. FogBugz : http://www.fogcreek.com/FogBugz
  4. PR-Tracker : http://www.prtracker.com  
  5. Trac : http://trac.edgewall.org/

테스트 프레임워크

  1. JUnit : http://www.junit.org
  2. NUnit : http://www.nunit.org
  3. xUnit.NET : http://www.codeplex.com/xunit
  4. MbUnit : http://www.mbunit.org
  5. HTMLUnit : http://htmlunit.sourceforge.net
  6. HTTPUnit : http://httpunit.sourceforge.net
  7. JWebUnit : http://jwebunit.sourceforge.net
  8. Cobertura : http://cobertura.sourceforge.net
  9. Clover : http://www.cenqua.com/clover  
  10. Cactus : http://jakarta.apache.org/cactus/
  11. Emma : http://emma.sourceforge.net/
  12. Fit : http://fit.c2.com
  13. Fitness : http://fitnesse.org  
  14. Watir : http://wtr.rubyforge.org
  15. Systir : http://atomicobject.com/systir.page
  16. AUT : http://aut.tigris.org/
  17. UnitTest++ : http://unittest-cpp.sourceforge.net/  
  18. TestNG : http://testng.org/doc/  
  19. CppUnit : http://sourceforge.net/projects/cppunit  
  20. CppUnit2 : http://cppunit.sourceforge.net/cppunit-wiki/CppUnit2  
  21. Selenium : http://www.openqa.org/
  22. Agitar : http://www.agitar.com/  
  23. JTest : http://www.parasoft.com/jsp/home.jsp  
  24. PushToSoft : http://www.pushtotest.com/  
  25. Eclemma : http://www.eclemma.org/

프로젝트 관리

  1. OpenProj : http://openproj.org/openproj 
  2. dotproject : http://www.dotproject.net/
  3. Mantis : http://www.mantisbt.org/

커뮤니케이션 도구, 위키

  1. MoinMoin : http://moinmoin.wikiwikiweb.de/
  2. Confluence : http://www.atlassian.com/software/confluence/
  3. TWiki : http://twiki.org/
  4. SocialText : http://www.socialtext.com/  
  5. Springnote : http://www.springnote.com/ko

성능분석

  1. ANTS Load : http://www.red-gate.com/products/ants_load/index.htm  
  2. JunitPerf : http://www.clarkware.com/software/JUnitPerf.html  
  3. Jmeter : http://jakarta.apache.org/jmeter/

기타

  1. Structure101 : http://www.headwaysoftware.com/index.php  
  2. FreeMind : http://freemind.sourceforge.net/wiki/index.php/Main_Page  
  3. Capistrano : http://manuals.rubyonrails.com/read/book/17
출처 :   개발이 좋아 개발자가된 많은 사람들에게 말하고 싶은 이야기. by k16wire
반응형

이클립스 문서 번역 사이트(노트)
퍼온곳: http://silent.springnote.com/pages/98847

출처 : http://www.eclipse.org/articles/Article-TPTP-Profiling-Tool/tptpProfilingArticle.html

설치를 간편하게 하기 위해선 기존 eclipse 는 그대로 두고 아래 올인원 패키지를 다운받으시는걸 추천

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

  Copyright © 2006 International Business Machines Corp.

 Eclipse Corner Article

 

TPTP 를 이용한 자바 어플리케이션 프로파일링

요약
이클립스 테스트 & 성능 툴 플랫폼 (TPTP) 프로파일링 툴은 이클립스 플러그인을 프로파일하기 위해 사용할 수 있다. 로컬 자바 어플리케이션은 물론 여러 개의 호스트나 서로 다른 플랫폼에서 동작하는 복잡한 어플리케이션에도 가능하다. 이 툴은 이클립스에 통합되어 있으며, 이클립스 상에서 동작하는 어플리케이션의 프로파일링을 해준다.
이 문서는 TPTP 프로파일링 툴을 가지고 문제가 있는 동작을 확인하기 위해 자바 어플리케이션을 프로파일 하는 방법을 설명한다. 프로파일 세션을 시작하는 방법, 데이터 분석을 위한 다양한 TPTP 뷰를 사용하는 방법, 실행 시간이 긴 메소드를 확인하여 성능 문제를 해결하기 위해 소스 코드로 이동하는 것까지 보여준다.
 
By Valentina Popescu, IBM
February 21, 2006 (updated July 11, 2006)
 
번역 : 이상훈(calm1979@gmail.com)
2007 4 7

 

어플리케이션 프로파일링

지금처럼 제품을 만들어 내기 위한 단기적인 개발 사이클을 돌고 있는 상황에서는, 개발자들이 테스트, 디버깅, 코드 수정을 통한 함수의 기능적인 측면에만 중점을 두는 경향이 있다. 그러나, 대다수의 문제는 어플리케이션이 (하루 24시간, 일주일에 7일 그리고 예상치 못한 피크 타임에의 한계까지 도달하게 되는) 실제 제품으로 동작할 때까지 쉽게 드러나지 않는다.

이런 류의 성능 문제는 디버깅 단계에서는 볼 수 없는 것들이다. 제품을 배포하기 전에 실제 상황에서 돌려보는 것이 중요하다. 어플리케이션의 동작을 분석하고, 병목현상, 객체 누수, 시스템 자원 제한 같은 성능 문제를 찾아내기 위해 프로파일링 툴을 사용하는 것은 중요하다.
이 문서는 TPTP 프로파일링 툴을 소개한다. 그리고, 성능 문제를 확인하고 수정, 검증하기 위해 자바 어플리케이션을 프로파일링 할 수 있도록 TPTP 프로파일링 툴의 사용법을 설명한다.

TPTP 프로파일링 툴

이클립스 테스트 & 성능 툴 플랫폼 (TPTP) 프로젝트는 병목현상, 객체 누수 그리고 시스템 자원 제한 같은 성능 문제를 확인하고 처리할 수 있는 프로파일링 툴을 제공한다. 이 툴은 단순한 독립적인 자바 어플리케이션부터 이클립스 플러그인까지 혹은 서로 다른 플랫폼이나 다양한 머신에서 돌아가는 복잡한 엔터프라이즈 어플리케이션까지 목표로 한다.

이클립스 프로젝트와 완벽하게 통합되어 있기 때문에, 사용하기 쉽고 확장하기도 쉽다. 이것은 사용자가 자신의 데이터 분석 화면을 붙일 수도 있고, 데이터 수집 에이전트에서 자신의 구현을 통해 데이터 수집 메타포어(metaphor)를 확장할 수 있음을 의미한다.

이 문서는 이클립스 3.2.0을 필요로 하는 EMF 2.2.0 과 XSD 2.2.0 기반으로 하는 TPTP 4.2.0 을 사용해서 작성했다. 여기에서 이것들을 구할 수 있다. TPTP 4.2.0 설치를 위한 설명을 보려면 TPTP 다운로드 페이지 로 가면된다.

TPTP 를 이용한 자바 어플리케이션 프로파일링

이 문서에서 사용한 제품 카탈로그 샘플 어플리케이션은 각각의 xml 파일에 저장된 제품 정보를 분석해서 콘솔 화면에 결과를 출력하는 간단한 자바 어플리케이션이다. 제품 정보를 포함하는 xml 파일들이 위치한 디렉토리 경로는 Product.java 프로그램의 인자로 주어진다. 제품 정보를 포함하고 있는 xml 파일들은 예제 실행하기에서 제공한다.

프로파일링 모드로 어플리케이션 시작하기

샘플 어플리케이션을 설치한 후에, 첫 단계로 제품 카탈로그 어플리케이션을 프로파일링 모드로 실행한다. 아래 그림 1처럼 Product.java 를 선택하고 팝업 메뉴의 Profile As > Java Application 를 선택해서 어플리케이션을 프로파일한다.

그림 1 제품 카탈로그 어플리케이션 프로파일 하기

프로파일링 모드로 어플리케이션을 실행하는 다른 방법은 자바 퍼스펙티브의 툴바 메뉴에 있는 Profile 액션을 사용하는 것이다. Run 이나 Debug 툴바 액션 처럼, Profile 액션은 런치 설정(launch configuration) 다이얼로그를 나타낼 것이다. 다이얼로그에서 프로파일 하고 싶은 어플리케이션의 타입을 선택할 수 있다.

자바 프로그램 인자 설정하기

The Profile As > Java Application 을 선택하면 그림 2와 같은 런치 설정 마법사(Launch Configuration Properties wizard)가 열릴 것이다.

이 예제에서는 제품 xml 파일의 경로를 프로그램의 인자로 넘겨준다. 이 문서의 제일 아래에서 제공되는 파일을 x:\myPath 에 풀었다고 할 경우 x:\myPath\products 를 아래 그림 2에서 보여지는 것처럼 프로그램 인자로 설정한다.

Program arguments

그림 2 제품 카탈로그 샘플 – 프로그램 인자(Program arguments)

프로파일링 필터 설정하기

다음 단계로 메소드 실행 정보를 수집하기 위한 프로파일링 옵션을 설정한다.
이 옵션을 설정하기 위해, 런치 설정 마법사(Launch Configuration Properties wizard)의 모니터(Monitor) 탭을 선택하고, 측정하고자 하는 프로파일링 옵션을 설정한다.

프로파일링 필터 셋(Profiling filter set)은 프로파일링 필터의 재사용 가능한 셋(set)이다. 프로파일링 필터 셋을 만드는 이유는 같은 어플리케이션을 연속적으로 실행하거나, 어플리케이션 간에 같은 종류의 프로파일링 정보를 수집하기 위해 필터 셋을 재사용하기 위함이다.
아래에서 제품 카탈로그 어플리케이션을 프로파일 하기 위해 사용되는 새로운 필터 셋을 만드는 방법을 설명한다. com.sample.product 로 시작하는 패키지에 대해서만 사용하는 ProductFilterSet 이라는 새로운 필터 셋을 만들 것이다.

1. 실행 정보를 수집하기 위해 모니터(Monitor) 탭에서 실행 시간 분석(Execution Time Analysis) 옵션을 선택한다.

Execution Time Analysis option

그림 3 실행 시간 분석(Execution Time Analysis) 옵션

위 그림 3에서 보는 바와 같이 실행 시간 분석(Execution Time Analysis) 옵션을 선택했다. 이것은 제품 카탈로그 어플리케이션의 연속적인 실행 중에 사용될 수 있다. 이 어플리케이션의 다음 실행 때에는 “프로파일링 필터 설정하기” 단계는 건너뛸 수 있다.

2. 프로파일링 실행 옵션을 설정하기 위해 “옵션 수정(Edit Options)” 버튼을 누른다.

2a. "Collect boundary classes excluded by the filter set" 옵션을 선택하고 Boundary class depth 값으로 3을 입력한다.

이 옵션을 선택함으로써, 필터 범위 내에서 실행되는 메소드들 중에 입력된 단계(depth)까지 호출되는 메소드에 대한 정보를 수집하겠다고 설정 한 것이다.

예를 들어, MyMethod 라는 메소드에 대해 정보를 수집하도록 설정했고, M1, M2, M3, M4 메소드에 대해 필터 설정을 했다고 하자.

다음과 같은 invocation stack 이 실행되었다고 한다면: MyMethod > M1 > M2 > M3 > M4 ( MyMethod 가 M1 을 호출하고, M1이 M2를 호출하고, M2가 M3를 호출하고, M3가 M4를 호출했다.), 2a 에서 설정한 필터 범위 값에 따라, 프로파일러는 콜 스택을 다음과 같이 보여줄 것이다: MyMethod > M1 > M2 > M3 그리고 마지막 M3>M4는 표시되지 않을 것이다. (호출 단계(depth)가 3을 초과했기 때문이다).

Profiling Execution options

그림 4 실행 정보 수집을 위한 설정

 

3. 프로파일 하기 위한 클래스들을 선택하기.

     모니터(Monitor) 탭에서, 자바 프로파일링(Java Profiling) 아이템을 선택하고 옵션 수정(Edit Options)을 선택한다. 그러면 필터 셋 마법사(Filter Set wizard)가 뜬다.
필터 셋 페이지는 프로파일 하고자 하는 클래스를 선택하기 위해 사용한다. 사용 가능한 필터들이 설정되어 있을 것이다. 그러나 이 예제에서는 com.sample.product 로 시작하지 않는 모든 패키지를 제외하는 ProductFilterSet이라고 하는 새로운 필터 셋을 만들 것이다.
필터 셋을 만들기 위한 단계:

3a) 필터 셋(filter set) 목록에서 추가(Add...) 버튼을 선택한다. 새로운 필터 셋의 이름을 ProductFilterSet 을 입력하고 확인(OK)을 누른다.

3b) 그림 5에서 보는 것 처럼 두 개의 필터를 추가하기 위해 선택된 필터 셋(Contents of selected filter set) 목록에서 추가(Add…) 버튼을 누른다.

 

Select the classes to be profiled

그림 5 프로파일 하고자 하는 클래스 선택하기

 

 

어플리케이션 실행하기


런치 설정 마법사(Launch Configuration wizard)에서 확인(OK)을 누름으로써 제품 카탈로그 어플리케이션(Product catalog application)을 실행한다. 프로파일링 & 로깅(Profiling and Logging) 퍼스펙티브로 전환하겠냐는 다이얼로그가 뜨면 예(Yes)를 선택한다.
아래 그림 6에서처럼 콘솔 화면에 프로그램 실행 결과가 출력되는 것을 볼 수 있을 것이다.

Product application terminated

그림 6 제품 카탈로그 어플리케이션(Product catalog application)이 실행되었다

 TPTP 프로파일링 툴은 어플리케이션과의 상호 작용을 할 수 있도록 한다. 모니터링을 일시 정지, 다시 시작 할 수 있으며, GC(garbage collection)를 실행할 수도 있고 객체 레퍼런스(object references)를 수집하거나 어플리케이션을 종료할 수도 있다.


실행 통계(Execution Statistics) 뷰를 이용한 성능 문제 확인하기


성능 문제를 확인하기 위해 실행 통계 뷰를 사용한다. 뷰를 열기 위해, 프로파일링 모니터 뷰에서 프로세스(process)를 선택하고 Open with > Execution Statistics 를 선택한다.
아래 그림 7 에서 보는 바와 같이 실행 통계 뷰에서는 실행된 메소드들을 누적 시간(cumulative time)으로 정렬해서 볼 수 있다. 메소드의 누적 시간은 다른 메소드를 호출하는 것을 포함한 실행 시간이다.

Execution statistics view

 

그림 7 실행 통계(Execution Statistics) 뷰

그림 7 보면, main(java.lang.String[]), readData(java.lang.String) 그리고 createParser()의 3가지 메소드가 가장 오랜 실행 시간을 사용한 것을 알 수 있다. Main과 readData 메소드가 상위에 있는 것은 걱정할 것이 아니다. 처음 것은 어플리케이션의 시작점이고, 두번째 것은 xml 파일로부터 제품 정보를 읽어들이는 것이기 때문이다.

우리가 지켜봐야할 것은 단지 xml 파일을 파싱(parsing) 하기 위해 SAX 파서 인스턴스를 만드는 creatParser() 메소드가 높은 실행 시간을 나타내고 있다는 것이다. 이 메소드의 실행 시간이 어플리케이션의 전체 실행 시간에 42.96%나 차지한다. 실행 통계는 이 메소드가 어플리케이션의 성능을 최적화하기 위한 가능성이 있는 부분임을 알게 해준다.

일단 이 것을 확인했으면, createParser() 메소드의 상세 실행 정보를 보기 위해 드릴 다운(drill down) 해보자.

createParser() 메소드에서 메소드 호출 상세(Method Invocation Details ) 뷰 열기

다음으로 우리는 createParser() 콜 스텍의 어떤 메소드가 이 메소드의 실행 시간을 느리게 하는지 보기 위해 메소드 호출 상세 뷰를 사용한다. 실행 통계 뷰에서 createParser() 메소드를 더블 클릭하여 메소드 호출 상세 뷰를 열자.

Method Invocation Details

그림 8 메소드 호출 상세(Method Invocation Details) 뷰

 


그림 8에서는 createParser() 메소드의 실행 정보를 보여준다. 보는 바와 같이 이 메소드는 readData(java.lang.String)에 의해서 한 번 호출되었고 5개의 다른 메소드들을 호출함을 알 수 있다. 호출한 메소드(Selected method invokes) 테이블을 보면 newSAXParser()와 newInstance() 메소드가 createParser() 메소드를 느리게 한다는 것을 알 수 있다. createParser() 메소드가 24번 호출된 것 처럼 이 두 메소드가 24번이나 호출되었다.

확인된 성능 문제로부터 해결책을 정의하기


이 데이터를 분석함으로써, 우리는 createParser() 메소드의 실행 시간 향상을 위해서는 두 개의 SAXParserFactory 메소드의 샐행 향상을 해야한다는 것을 알았다. 우리는 이 메소드의 구현에 관여할 수 없으므로, 우리의 어플리케이션 실행 향상을 위해서는 이 메소들의 호출을 최대한 줄여야한다.

해결책은 모든 파일 마다 새로운 파서를 만들지 않고, 하나의 파서 인스턴스를 만들고 이것을 재사용하는 것이다. 소스 코드를 열고 수정해보자.

이런식의 최적화 방향을 결정하기 전에, 코드 상에서 지원을 하는지를 확실하게 해둘 필요가 있다. 예를 들어, SAXParser는 여러 쓰레드에 의해서 동시에 사용될 수 없기 때문에 인스턴스를 재사용할 수 있는 것이다. 엄격하게 말하면 인스턴스는 재사용하기 전에 reset()해주어야 한다. 변경 내용을 적용할 수 있는 코드를 작성하기 전에 포괄적인 단위 테스트 조합을 구성해두는 것도 좋은 생각이다.

 

소스 코드를 열고 성능 문제를 수정하기

createParser() 메소드에 대한 소스 코드를 열기 위해 메소드 호출 상세(Method Invocation Details) 뷰에서 마우스 우클릭을 하고 팝업 메뉴에서 소스 열기(Open Source)를 선택한다.

Source code


그림 9 소스 코드

그림 9에 createParser() 에 대한 소스 코드가 있다. 이 메소드가 매번 호출될 때 마다 새로운 SAX 파서 인스턴스를 만드는 것을 알 수 있다.
아래 그림 10처럼 하나의 파서 인스턴스를 만들고 모든 xml 파일을 파싱하는데에 그것을 재사용하도록 코드를 수정하자.

Source code

그림 10 소스 코드 수정

그림 10에서 보는 것 처럼 전역 SAXParser 인스턴스를 만들어서 성능 문제를 해결했다. createParser() 메소드는 파서를 초기화 하고 메소드가 호출될 때 마다 만들어진 인스턴스를 리턴한다.

다시 돌아가서 제품 카탈로그 어플리케이션을 다시 프로파일링 모드로 동작시켜 수정 내용을 검증해보자.

성능 문제 해결 검증하기

성능 문제 해결을 검증하기 위해, 위에서 말한 것 처럼 Product 클래스를 선택하고 우클릭해서 Profile As > Java Application를 선택한다.

프로파일링 옵션 마법사는 나타나지 않을 것이다. 이전에 설정한 프로파일링 옵션이 어플리케이션 실행시에 사용된다. 어플리케이션을 실행한 후에 실행 통계(Execution Statistics) 뷰를 열고 실행 시간을 비교해보자.
그림 11에 수정된 코드를 적용한 후의 실행 시간이 있다:

 

Execution Statistics view

 

그림 11 실행 통계(Execution Statistics) 뷰

 

위 그림에서 보는 것처럼, 수정하기 이전에 거의 43% 였던 createParser() 메소드의 실행 시간이 단지 19%로 줄었다.
이 성능 향상은 파싱해야될 xml 파일이 많을수록 더 커질 것이다. 따라서 카탈로그에 추가되는 제품 정보 파일이 많아질수록 어플리케이션의 실행 시간이 엄청나게 줄어들게 될 것 이다.

결론

이 문서에서는 TPTP 프로파일링 툴을 사용해서 성능 문제를 확인하고 해결하는 방법을 설명했다. 이 문서에서는 다루지 못한 TPTP 툴의 많은 기능이 더 있다. 만약 이 툴의 기능을 더 알고 싶다면 여기에 있는 튜토리얼 슬라이드와 사용자 가이드들을 보기 바란다.

예제 실행하기

"ProductCatalog_example.zip" 파일에는 이 문서에 나와있는 예제의 소스 코드를 포함하고 있다. 이클립스의 “plugins” 디렉토리에 ZIP 파일을 풀면된다. 또한 제품 xml 파일들은 products.zip 파일에 있다. products.zip 파일을 시스템의 원하는 곳에 풀어놓고, 그 경로를 제품 카탈로그 어플리케이션의 프로그램 인자로 적어주면 된다.

Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.


반응형
0. Java Profiling API란?

프로파일러라고 함은 application의 문제를 진단하고 성능을 측정하기 위해서 사용하는 도구임.
Java관련한 application은 JVM의 정보를 가져와야 하는데 이를 위해서 자바에서 제공하는 API이다.

JVMPI for Java 1.3, 1.4
- 클래식 자바 가상머신에서 잘 동작하도록 설계되어 있음
- 이벤트 기반 모델 방식
- Sun에서 실험적이라는 표현을 사용하기도 하고 Java 1.6에서부터는 사용하고 있지 않음
- 이번 application에서는 Java 1.6이라 이 방식을 활용한 tool에 대한 조사는 하지 않음

JVMTI for Java 1.5 이상
- ByteCode Instrumentation(BCI)라는 방법을 통하여 사용함
- 모니터링하고자 하는 바이트 코드의 정확한 위치에 프로파일링 코드를 추가함으로써 수행함
- 아래에 설명되는 거의 모든 기술이 이 방식을 통해서 사용하고 있음

Profiling Tool은 정보수집/분석/정보수집 & 분석 을 담당한다.
따라서 수집만 하는 툴은 눈으로 직접 분석하던지 분석을 하는 툴을 따로 써야 한다.

관련자료 : http://openframework.or.kr/Wiki.jsp?page=JvmtiNjvmpi


1. Jstack

1.1 정보를 수집하는 Tool이다.
1.2 Thread Dump를 뜨는 자바의 기본적인 명령어이다.
1.3 윈도우는 Java 1.6에서부터 사용가능, 리눅스용은 Java 1.4부터 가능
1.4 사용방법
   - jps 를 이용해서 java의 프로세스를 찾는다 : C:\Java\jdk1.6.0\bin>jps -v
   - 발견한 PID를 이용해서 Thread Dump를 뜬다 : C:\Java\jdk1.6.0\bin>jstack 4740 > st.txt
    - Dump 내용 예시
      "hmux-127.0.0.1:6802-9" daemon prio=10 tid=0x9e3ad400 nid=0x17b9 runnable [0x9d3fd000..0x9d3fdfa0]
      java.lang.Thread.State: RUNNABLE
      at java.net.SocketInputStream.socketRead0(Native Method)
      at java.net.SocketInputStream.read(SocketInputStream.java:129)
      at com.caucho.vfs.SocketStream.read(SocketStream.java:175)
      at com.caucho.vfs.ReadStream.readBuffer(ReadStream.java:1012)
      at com.caucho.vfs.ReadStream.waitForRead(ReadStream.java:336)
      at com.caucho.server.port.TcpConnection.run(TcpConnection.java:598)
      at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:690)
      at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:612)
      at java.lang.Thread.run(Thread.java:619)
1.5 Dump 내용을 분석하는 법 : http://www.j2eestudy.co.kr/lecture/lecture_read.jsp?db=lecture0201_1&table=j2ee&id=24
1.6 장단점
    - 특별한 Coding 을 필요로 하지 않는다.
    - 문제가 발생한 시점에 명령어를 수행해서 Hang이 걸린 Thread의 정보를 찾아낼수 있다.
    - 눈으로 찾아야 하기에 연습을 통한 숙달이 필요하다.
1.7 참고자료 : http://kwon37xi.egloos.com/2871508


2. HPRof

2.1 정보를 수집하는 Tool이다.
2.2 Heap And CPU Profilling Agent 의 약자, JDK에서 기본적으로 제공해준다.
2.3 HPRof로 수집된 데이터를 Heap Analyzer로 다시 분석한다.
2.4 사용방법 (resin 3.1.X 기준)
    - resin.conf 파일을 오픈한다
   - JVM arguments 항목에 <jvm-arg>-agentlib:hprof=heap=sites,cpu=samples,file=d:\zeous\profiling.txt</jvm-arg> 넣는다.
2.5 수집데이터 예시
    TRACE 300539:
    java.security.ProtectionDomain.getCodeSource(ProtectionDomain.java:Unknown line)
    java.lang.ClassLoader.postDefineClass(ClassLoader.java:Unknown line)
    java.lang.ClassLoader.defineClass(ClassLoader.java:Unknown line)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:Unknown line)
2.6 장단점
   - 데이터가 엄청나게 많이 생성된다 (모든 데이터를 다 기록하는듯)
   - JVM 옵션을 주고 서버를 구동시키면 한참 느려진다
   - 프로파일 데이터에 실시간 기록이 아니라 서버를 종료하거나 action (Ctr+break)을 해줘야 기록된다.
2.7 참고자료 : http://wiki.ex-em.com/index.php/HProf


3. ASM

3.1 정보를 수집&분석하는 Tool 이다.
3.2 BCI의 API 를 이용해서 가장 low 레벨로 컨트롤하는 방법임
3.3 HPRof가 모든 class에 대한 분석임에 반해 이 방법은 특정 클래스에 대한 action을 원하는 형태로 지정(코딩)할수 있다.
3.4 장단점
    - 특정 class에 대한 컨트롤이 가능하다(예, connection 연결이 몇번 호출되었는지 카운트가능)
    - 자유도가 높은 만큼 처음부터 코딩해야 한다.
3.5 참고자료
    - http://somnusong.tistory.com/275
    - http://asm.objectweb.org/index.html

4. Jconsole

4.1 정보수집 & 분석해주는 Tool이다.
4.2 JDK1.5 부터 포함된 로컬, 원격 자바 application 분석툴
4.3 자료수집 및 Swing으로 구성된 분석 UI까지 제공한다
4.4 사용법 (resin 3.1.X 기준)
    - resin.conf 파일을 오픈한다
    - JVM argument 항목에
      <jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>
      <jvm-arg>-Dcom.sun.management.jmxremote.port=1403</jvm-arg>
      <jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
      <jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg> 넣는다
4.5 장단점
    - 자료를 수집하는 과정에서도 서버의 부하가 거의 없다.
    - 특별한 코딩을 하지 않고 분석된 자료까지 UI를 통해서 제공 받는다
    - id/password를 설정해서 입력받기도 가능한데 설정이 조금 까다롭다. (성공못하였음)
    - Jstack으로 생성되는 Thread Dump 의 자료는 모두 포함하고 있음
    - Jconsole을 다시 실행시키면 지금까지의 내용이 저장되지 않고 처음부터 다시 시작한다
4.6 참고자료
    - http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html
    - http://sjchoi.wordpress.com/2007/01/10/jconsole-사용하기/
    - http://www.mimul.com/pebble/default/tags/jmx/


5. Jennifer

5.1 정보수집 및 분석을 해주는 상용 Tool이다
5.2 2주간의 무료 라이센스를 얻어서 테스트 가능하다.
5.3 Jconsole은 자료를 저장할 수 없는 단점을 상용 Tool답게 분석된 로그를 저장해서 가지고 있다.
5.4 사용법 (resin 3.1.x기준)
    - 설치메뉴얼 : http://www.jennifersoft.com:8080/man/viewer/DocumentViewer.jsp?id=abc385f1-e652-48e5-8616-e24b13014734
    - 설치메뉴얼 이외에 http_service_class = javax.servlet.http.HttpServlet;com.caucho.jsp.JavaPage 를 W11.conf에 넣어줘야 한다
    - localhost로 나와있는 정보를 모두 IP정보로 셋팅해준다
5.5 사용메뉴얼 : http://www.jennifersoft.com/docs/ko/77.html
5.6 장단점
    - 돈이 든다 ^^
    - 실시간 경고 및 모니터링에 뛰어난 장점을 보여준다.

+ Recent posts