Akashic Records

VM 분석 : Chapter 1 Performance - 2 / -Xrunprof 옵션 본문

오래된글/Articles

VM 분석 : Chapter 1 Performance - 2 / -Xrunprof 옵션

Andrew's Akashic Records 2018. 4. 19. 14:43
728x90

-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 배열이다.


728x90
Comments