일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로젝트관리
- LG그램2017
- 객체설계
- SI와 SM 차이점
- SW설계
- 자바개발
- sonoff
- docker 네트워크
- ASUS 공유기
- EXK
- Tomcat error-page version
- LAN WAN
- 경력개발자
- maven #junit
- open cursors
- angular 6
- CBD 단점
- Data Transfer Object(DTO)
- 자바튜닝
- 실해하지 않는
- Value Object(VO)
- USB-C충전
- tvheadend
- 자바스크립트 JQuery
- 소프트웨어설계
- SpringBoot
- 구글캘린더 검색
- 네트워크 기본개념
- USB-C to HDMI 아답터
- SW분석
- Today
- Total
대빵's Blog
Jstat 사용법 본문
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 |