2011년 5월 25일 수요일

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

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

댓글 없음:

댓글 쓰기

시스템 부팅시 도커 컨테이너 자동 실행

Docker 컨테이너를 운용중인 시스템이 Reboot 되버리면 컨테이너가 자동으로 올라오지 않아 불편해서 시스템 리붓시 컨테이너를 자동으로 시작되게 init 데몬에 등록하기로 했습니다. 서버는 Ubuntu 17.10 Docker는 17.0...