대빵's Blog

Jstat 사용법 본문

개발관련

Jstat 사용법

bigzero 2014. 6. 26. 16:59

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


원본 위치 <http://sync.egloos.com/3322205

'개발관련' 카테고리의 다른 글

프로젝트에서 현명하게 협업하는 방법  (0) 2015.03.23
사용자가 원하는 것  (0) 2014.11.26
프로젝트에서 당신의 역할  (0) 2014.11.26
SI 프로젝트 현실  (0) 2014.11.26
Unrecognized Windows Socket Error 87  (0) 2014.08.14