jstat 사용법

성능 튜닝시 뭘 먼저 할것인가?
한번쯤은 생각해봐야 하는 내용이다.

1. AS-IS System 분석
   - AS-IS System 을 분석하고 현업과의 Communication 을 통하여 어떤 문제가 발생하고 있는지
     를 파악해야한다.

2. 성능 모니터링
    - 다양한 성능 Factor 를 모니터링 및 수집하여 장애 Point 를 잡아야한다.

3. 장애 분석
    - 장애 Point 라고 파악된 부분에 대하여 현업과 협의를 진행한다.
    - 단순한 수치상의 값으로는 장애라고 판단해서는 안된다.
    - Business Process, Resource 사용율 등등 장애가 아닐수도 있다.

4. Tuning and Test
    - 장애 Point 에 대하여 Tuning 을 진행한다.
    - Tuning 진행 후 테스트를 통하여 Tuning 성과를 검증한다.

5. 성능 모니터링
    - 성능 모니터링 부터 다시 Interation 한다.

6. 기술 이전 및 검수
    - Tuning 관련 History Data 및 기술 이전을 실시한다.


성능 Tuning 시 다양한 방법론이 존재하겠지만 간략하게 정의해 보면
보통 이런 형식일 것이다.

그럼 여기서 중요 Factor 중에 하나는 무엇일까 ?
성능 모니터링이다.
뭘로 할건데?
보통 Stree Tool , APM Tool , SMS Tool 등 고가의 Tool 을 사용하는 경우가 대부분이다.

여기서는 Memory 상태를 추적할 수 있는 공짜 Tool 을 하나 소개하겠다.
Sun JDK, HP JDK 에 포함되어있는 것으로 jstat 라는 것이다.
현재 JVM 의 Heap Memory 상태를 실시간으로 추적하는 매우 효율적인 Tool 이다.

다음은 jstat 에 사용할 수 있는 파라미터들이다.

[ngwas1:/NGI/agreeDomain]jstat
invalid argument count
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.


위에 있는 <option> 을 보겠다.

[ngwas1:/NGI/wily601]jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-printcompilation


위와같이 여러개의 옵션이 있는데 여기서 우리는 GC 관련 옵션을 선택하여 Heap Memory Area 를 추적해보겠다.

[ngwas1:/NGI/wily601]jstat -gc -h20 6637 3000
위의 명령을 해석해보면...

-gc : GC 되는 것을 보겠다는 의미
-h20 : 아래 데이터를 보면 알겠지만 숫자에 대한 헤더가 있는데 그 헤더를 20 라인마다 찍겠다는 의미이다.
6637 : Process PID 이다. 이건 항상 변하겠죠?
3000 : 시간이다. ms 단위라서 3000 이면 3초마다 한번씩 데이터를 추출하겠다는 얘기다.

위와같이 명령을 실행하면 아래와 같은 내용이 추출되며 각 줄마다 3초에 한번씩 추출된다.
그럼 아래의 데이터를 보는 법을 알려주겠다.
첫번째 파마리터 부터 설명을 붙여주겠다.

SOC : Servivor 0 Area Capacity
S1C : Servivor 1 Area Capacity
SOU : Servior 0 Area Used
S1U : Servivor 1 Area Used
EC : Eden Capacity
EU : Eden Used
OC : Old Capacity (Tenured Capacity)
OU : Old Used (Tenured Used)
PC : Permanent Capacity
PU : Permanent Used
YGC : Young GC Count
YGCT : Young GC Count Time (Young GC 시간이다. 누적시간이므로 아래서 위의 시간을 빼면 Young GC Time 을 알수있다)
FGC : Full GC Count
FGCT : Full GC Count Time
GCT : GC Time (YGCT + FGCT)

어려운가 ?

http://blog.naver.com/salsu0/30000025219  <== 요기를 읽고나서 보면 안어렵다.

그럼 아래 데이터를 한번 분석해 봅시다.

S0 Area 는 34 메가 정도가 할당되었다.
S1 Area 역시 동일하게 할당되었다.
Eden Area 는 72 메가 정도가 할당되었고
Old Area (Tenured Area) 는 700 메가 정도가 할당되었다.
Permanent Area 는 130 메가 정도 할당되었다.

Young GC 가 마지막줄을 봤을때 40 번 실행되었고,
Full GC 는 실행된적이 없다.

Young GC 가 40 번 실행되는 동안 걸린 시간은 7초 정도이며
맨 밑에 세번째 줄과 다음 줄을 비교해봤을때 Young GC 가 일어난 시간은 0.17 초 정도이다.
알다시피 GC 할때는 전혀 일을 하지 않는다.
물론 Default GC Option 일 경우이다. (다음번에는 GC Option 의 종류를 설명하겠다.)

그럼 다들 한번 테스트를 해보기를 바란다.

잼있죠 ?

  S0C        S1C     S0U      S1U      EC           EU            OC           OU            PC         PU        YGC    YGCT FGC    FGCT     GCT  
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 72110.9   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 73802.8   699072.0   86240.1   131072.0 69871.3     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 76141.1   699072.0   86240.1   131072.0 69871.4     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 102379.9  699072.0   86240.1   131072.0 69871.7     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 159719.5  699072.0   86240.1   131072.0 69875.0     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 207689.5  699072.0   86240.1   131072.0 69946.6     39    7.006   0      0.000    7.006
34944.0 34944.0  0.0   17142.6 279616.0 259934.1  699072.0   86240.1   131072.0 69948.0     39    7.006   0      0.000    7.006
34944.0 34944.0 17625.0  0.0   279616.0 50821.6   699072.0   86240.1   131072.0 69950.3     40    7.176   0      0.000    7.176
34944.0 34944.0 17625.0  0.0   279616.0 83850.1   699072.0   86240.1   131072.0 69950.9     40    7.176   0      0.000    7.176
 

by 돌쇠 | 2007/08/06 15:33 | Java | 트랙백 | 덧글(0)

트랙백 주소 : http://sync.egloos.com/tb/3322205
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶