달력

122024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

http://blog.empas.com/flag2ejb/4941495

-Xrunprof 옵션
이 옵션은 단순히 텍스트 형태로 쓰레드 정보와 메소드 호출 점유율, 호출 횟수, 호출 쓰레드 번호등을 보여준다. 이 옵션은 어플리케이션의 성능 측정에서 병목점을 찾을 때 많이 사용한다.
병목점은 찾는 방법은 점유율(%)가 높으면서, 호출 횟수는 작은 순서가 병목점의 순서가 된다.
최근에는 이 옵션은 단순히 HAT(The Heep Analysis Tool)을 실행하기 위한 바이너리 타입의 기초 데이터를 생성(format=b 옵션)하는 용도로 많이 쓰이기도 한다.
 
[craftlee@hurukku testspace]$ java -Xrunhprof:help
Hprof usage: -Xrunhprof[:help]|[:<option>=<value>, ...]
 
Option Name and Value  Description                Default
---------------------  ----------------------     -------
heap=dump|sites|all    heap profiling             all
cpu=samples|times|old  CPU usage                  off
monitor=y|n            monitor contention         n
format=a|b             ascii or binary output     a
file=<file>            write data to file         java.hprof(.txt for ascii)
net=<host>:<port>      send data over a socket    write to file
depth=<size>           stack trace depth          4
cutoff=<value>         output cutoff point        0.0001
lineno=y|n             line number in traces?     y
thread=y|n             thread in traces?          n
doe=y|n                dump on exit?              y
gc_okay=y|n            GC okay during sampling    y
 
Example: java -Xrunhprof:cpu=samples,file=log.txt,depth=3 FooClass
 
Note: format=b cannot be used with cpu=old|times
 
일반적인 사용 옵션
-         java -Xrunhprof <class>
-         java -Xrunhprof:cpu=samples,thread=y <class>
-         java -Xrunhprof:heap=sites <class>
-         java -Xrunhprof:cpu=samples <class>
-         java -Xrunhprof:cpu=samples,file=log.txt <class>
-         java -Xrunhprof:cpu=samples,format=b <class>
 
실행 예) 위에서 만든 “wileUnit.class”을 이용한다.
 
1.       java -Xrunhprof:cpu=samples,thread=y whileUnit 옵션으로 실행
THREAD START (obj=811a410, id = 1, name="Finalizer", group="system")
THREAD START (obj=811a530, id = 2, name="Reference Handler", group="system")
THREAD START (obj=811a5f8, id = 3, name="main", group="main")
THREAD START (obj=813c9c8, id = 4, name="Signal Dispatcher", group="system")
THREAD START (obj=813ca58, id = 5, name="HPROF CPU profiler", group="system")
THREAD END (id = 3)
THREAD START (obj=814daf8, id = 6, name="DestroyJavaVM", group="main")
THREAD END (id = 6)
TRACE 1: (thread=3)
        <empty>
TRACE 2: (thread=3)
        whileUnit.exec(whileUnit.java:15)
        whileUnit.main(whileUnit.java:27)
CPU SAMPLES BEGIN (total = 2) Mon Nov 22 12:59:32 2004
rank   self  accum   count trace method
   1 100.00% 100.00%       2     2 whileUnit.exec
CPU SAMPLES END
2.       위에서는 실행 메소드가 하나 뿐이 없어서 100%을 차지 하고있다.
3.       java -Xrunhprof:heap=sites whileUnit 옵션으로 실행
 
percent         live       alloc'ed  stack class
 rank   self  accum    bytes objs   bytes objs trace name
    1 63.90% 63.90%   602072  234  602072  234     1 [I
    2 16.32% 80.23%   153800  577  153800  577     1 [C
    3  5.02% 85.25%    47280  230   47280  230     1 [B
….
메모리에 점유율이 높은 객체 Ranking이 출력된다. 여기서 [I, [C, [B 타입은 Integer, Character, Byte 배열이다.
Posted by marryjane
|