티스토리 뷰
특정 프로세스에 대해 CPU 및 Memory 사용률을 확인하기 위해
top, sar, jstat 등의 명령을 자주 사용하게 되는데 그 중 파라미터도 길고 잘 안익혀지는 jstat 에 대하여
깔끔하게 정리된 글이 있어 남겨본다.
1. jstat 수행 방법
- 우선 모니터링 하고자 하는 프로세스의 ID 를 확인합니다.
확인하는 방법은 ps -ef | grep java 로 확인을 해도 되고,
프롬프트 상태에서 jps 라고 입력한 뒤 엔터를 치면 해당 JVM에서 수행된 프로세스의 ID를 보여줍니다.
(jps 사용시에는 PATH에 해당 JDK가 설정되어 있어야 합니다.
- 두번째로 jstat 명령을 수행 합니다.
jstat -gcutil -h20 -t 7251 3000 3000
-> gcutil : gcutil 에 대해서 수행
-> -h20 : 20라인마다 header 찍음
-> -t : time stamp 프린트(JVM 이 스타트 된 이후의 시간)
-> 7251 : 프로세스 id
-> 3000 : interval (ms 단위)
-> 3000 : count
2. 각각의 항목 설명
- S0 : Survivor 영역 0 의 사용율 (현재의 용량에 대한 퍼센티지)
- S1 : Survivor 영역 1 의 사용율 (현재의 용량에 대한 퍼센티지)
- E : Eden 영역의 사용율 (현재의 용량에 대한 퍼센티지)
- O : Old 영역의 사용율 (현재의 용량에 대한 퍼센티지)
- P : Permanent 영역의 사용율 (현재의 용량에 대한 퍼센티지)
- YGC : Young 세대의 GC 이벤트수
- YGCT : Young 세대의 가베지 콜렉션 시간
- FGC : 풀 GC 이벤트수
- FGCT : 풀 가베지 콜렉션 시간
- GCT : 가베지 콜렉션총시간
3. 샘플
>jstat -gcutil 21891 250 7
S0 S1 E O P YGC YGCT FGC FGCT GCT
12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.672
12.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.672
12.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.672
0.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673
이 예의 출력은, Young 세대의 콜렉션이 3 번째와 4 번째의 샘플간에 행해진 것을 나타내고 있습니다.
콜렉션에는 0.001 초 걸리고 있어 오브젝트가 Eden 영역 (E)으로부터 Old 영역 (O)에 승격했기 때문에,
Old 영역의 사용율은 9.49% 에서 9.51% 에 증가하고 있습니다.
Survivor 영역은, 콜렉션전은 12.44% 가 사용되고 있었습니다만, 콜렉션 후는 7.74% 밖에 사용되고 있지 않습니다.
실시간으로 메모리 사용을 좀 확인해야 하는 상황에서는 위와 같이 jstat 로 간단하게 모니터링을 수행하면
현재의 JVM 메모리 사용 상황을 확인이 가능할 것 같습니다.
가장 정확한 건 GC 로그를 별도의 파일로 출력하게 해서 분석하는 것이지만, 이럴 경우에는 실시간으로 확인이 힘들기 때문에
위와 같이 사용하는 것도 괜찮은 방법 중의 하나일 것 같습니다.
물론 JVM 에 계속 request 를 보내기 때문에 부하가 있을 듯 하지만, 지금 생각으로는 크게 영향은 미치지 않을 듯 하네요..
영향이 고려되면 interval을 좀 조정하든지 하면 될 듯 합니다.
<참고>
http://blog.naver.com/PostView.nhn?blogId=solvage&logNo=10038025715
'프로그래밍 > OS' 카테고리의 다른 글
멀티 프로세싱 케케묵은 문제들 - 병렬 처리 관련 문제 (0) | 2016.11.28 |
---|---|
리눅스 쉘 스크립트 백그라운드 실행 (0) | 2016.06.27 |
- Total
- Today
- Yesterday
- github
- 붙여넣기
- 템플릿 메소드
- directory
- 백그라운드
- NullPointerException
- equals
- Eclipse
- "
- 생산자
- 페이스북
- 멀티프로세싱
- 클립보드
- 대학의 정석
- 기한
- 디렉토리
- json
- variable
- Template Method
- commit
- 페북
- 당신 없는 회사에 가고 싶다
- gcutil
- Jackson
- shapeshifter
- 팀플
- jstat
- serialization
- java
- migrate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |