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 장단점
    - 돈이 든다 ^^
    - 실시간 경고 및 모니터링에 뛰어난 장점을 보여준다.



댓글을 달아 주세요

  1. Favicon of http://liebus.net BlogIcon 세라비  댓글주소  수정/삭제  댓글쓰기

    딴지는 아니구요 제니퍼와 나머지 툴들은 비교하기 쫌 그런거 같내요 소스를 뜯어 본건 아니지만 제니퍼의 경우 기존의 BCI API들을 이용하여 구현 된것이 아닐가요? 그냥 개인적인 추축 입니다. 기타 다른 툴들 퍼포마이져 라 든가 시스마스터 등등 이런 APM툴과 같은 라인에서의 비교는 ^^;; 어디가지나 개인적인 생각, 지나가다가 남겨 봄니다.

    2008.11.27 01:17

1 2 3 4 5 6 7 8 9 

글 보관함

카운터

Total : 1,733,629 / Today : 51 / Yesterday : 111
get rsstistory!