본문 바로가기
Old Posts/Linux

[Linux] jstat 명령 사용법

by A6K 2021. 12. 30.

jstat 명령은 JDK 1.6 버전부터 함께 제공되기 시작한 모니터링 및 분석툴이다. jstat 명령을 이용해서 JVM 상태를 모니터링하고, GC(Garbage Collection)에 대한 정보를 확인할 수 있다. 이 정보를 바탕으로 JVM을 튜닝할 수 있다.

jstat 사용법

jstat -help 를 입력하면 jstat 명령어의 사용법을 확인할 수 있다.

$ jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      아래에서 설명할 jstat 명령어의 옵션
  -t            출력의 가장 첫번째 컬럼에 timestamp 출력
  <vmid>        모니터링하려는 JVM의 PID 출력
  <lines>       모니터링 출력 사이에 샘플 번호 출력
  <interval>    모니터링 출력 주기 단위는 기본이 초, 혹은 밀리세컨드(s)로 설정할 수도 있음
  <count>       모니터링 횟수
  -J<flag>      런타임 시스템에 <flag>를 직접 전달

jstat -option 을 입력하면 jstat 명령어에 사용할 수 있는 옵션들을 확인할 수 있다.

$ jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

 

 

jstat에서 사용할 수 있는 옵션에 대한 설명은 다음과 같다.

옵션 이름 설명
-class 클래스 로더의 동작에 대한 통계
-compiler HotSpot의 JIT 컴파일러에 대한 통계
-gc GC된 heap의 동작에 관한 통계
-gccapacity 세대마다의 용량과 대응하는 영역 통계
-gccause GC 통계 데이터(-gcutil 옵션)와 직전 및 현재의 GC 이벤트의 원인
-gcnew New 세대 동작에 관한 통계
-gcnewcapacity New 세대의 사이즈와 대응하는 영역에 대한 통계
-gcold Old 세대 및 Permanent 세대의 동작에 관한 통계
-gcoldcapacity Old 세대의 사이즈에 관한 통계 
-gcpermcapacity Permanent 세대의 사이즈에 대한 통계
-gcutil GC 통계 데이터
-printcompilation HotSpot 컴파일러의 통계 데이터

jstat 결과 정보

jstat 명령의 옵션에 따라 결과 화면이 다르다. 다음은 각 옵션의 출력 화면에서 나오는 값들에 대한 설명이다.

jstat -class

클래스 로더의 통계 데이터

컬럼 설명
Loaded 로드 된 클래스 수
Bytes 로드 된 바이트수
Unloaded 언로드 된 클래스 수
Bytes 언로드 된 K 바이트수
Time 클래스 로드나 언로드 처리에 걸린시간

jstat -compiler

컴파일러의 통계 데이터

컬럼 설명
Compiled 실행된 컴파일 작업의 수
Failed 실패한 컴파일 작업의 수
Invalid 무효화된 컴파일 작업의 수
Time 컴파일 작업의 실행 시간
FailedType 마지막에 실패한 컴파일의 타입
FailedMethod 마지막에 실패한 컴파일의 클래스명과 메소드

jstat -gc

GC와 관련된 통계 데이터

컬럼 설명
S0C Survivor 영역 0의 크기(KB)
S1C Survivor 영역 1의 크기(KB)
S0U Survivor 영역 0의 사용량(KB)
S1U Survivor 영역 1의 사용량(KB)
EC Eden 영역의 크기(KB)
EU Eden 영역의 사용량(KB)
OC Old 영역의 크기(KB)
OU Old 영역의 사용량 (KB)
PC Permanent 영역의 현재 용량(KB)
PU Permanent 영역의 사용량(KB)
YGC Young 세대의 GC 이벤트 수
YGCT Young 세대의 GC 시간
FGC Full GC 이벤트 수
FGCT Full GC 시간
GCT GC의 합계 시간

jstat -gccapacity

세대별 용량과 대응하는 영역에 대한 통계

컬럼 설명
NGCMN New 세대의 최소 크기 (KB)
NGCMX New 세대의 최대 크기 (KB)
S0C Survivor 영역 0의 크기(KB)
S1C Survivor 영역 1의 크기(KB)
EC Eden 영역의 크기(KB)
OGCMN Old 세대의 최소 크기(KB)
OGCMX Old 세대의 최대 크기(KB)
OGC Old 세대의 현재 크기(KB)
OC Old 영역의 현재 크기(KB)
PGCMN Permanent 세대의 최소 크기(KB)
PGCMX Permanent 세대의 최대 크기(KB)
PGC Permanent 세대의 현재 크기(KB)
PC Permanent 영역의 현재 크기(KB)
YGC Young 세대의 GC 이벤트 수
FGC Full GC 이벤트 수
NGC New 세대의 현재 크기(KB)

jstat -gcutil

GC와 관련된 통계 데이터

컬럼 설명
S0 Survivor 영역 0의 사용율(현재 용량에 대한 비율)
S1 Survivor 영역 1의 사용율(현재 용량에 대한 비율)
E Eden 영역의 사용율 (현재 용량에 대한 비율)
O Old 영역의 사용율 (현재 용량에 대한 비율)
P Permanent 영역의 사용율 (현재 용량에 대한 비율)
YGC Young 세대의 GC 이벤트 수
YGCT Young 세대의 GC 시간
FGC Full GC 이벤트 수
FGCT Full GC 시간
GCT GC 총 시간

jstat -gccause

GC 이벤트의 원인 정보

컬럼 설명
LGCC 마지막 GC의 원인
GCC 현재 GC의 원인

jstat -gcnew

New 세대의 통계

컬럼 설명
S0C Survivor 영역 0의 크기(KB)
S1C Survivor 영역 1의 크기(KB)
S0U Survivor 영역 0의 사용량(KB)
S1U Survivor 영역 1의 사용량(KB)
TT Tenuring Threashold. Young 영역내에서 이 횟수만큼 복사되었을 경우 (S0 -> S1, S1 -> S0) Old 영역으로 이동
MTT 최대 Tenuring Threashold. Young 영역 내에서 이 횟수만큼 복사되었을 경우 Old 영역으로 이동
DSS 적절한 Survivor 영역의 크기를 KB 단위로 표시
EC Eden 영역의 현재 크기(KB)
EU Eden 영역의 현재 사용량(KB)
YGC Young 세대의 GC 이벤트 수
YGCT Young 세대의 GC 시간

jstat -gcold

Old 및 Permanent 세대의 통계

컬럼 설명
PC Permanent 영역의 현재 크기(KB)
PU Permanent 영역의 현재 사용량(KB)
OC Old 영역의 현재 크기(KB)
OU Old 영역의 현재 사용량(KB)
YGC Young 세대의 GC 이벤트 수
FGC Full GC 이벤트 수
FGCT Full GC 시간
GCT GC 총 시간

jstat -gcoldcapacity

Old 세대의 통계 

컬럼 설명
OGCMN Old 세대의 최소 크기(KB)
OGCMX Old 세대의 최대 크기(KB)
OGC Old 세대의 현재 크기(KB)
OC Old 영역의 현재 크기(KB)
YGC Young 세대의 GC 이벤트 수
FGC Full GC 이벤트 수
FGCT Full GC 시간
GCT GC 총시간

jstat -printcompilation

컴파일과 관련된 정보 출력

컬럼 설명
Compiled 실행된 컴파일 작업의 수 
Size 메소드와 바이트 코드의 바이트 수
Type 컴파일 타입
Method 컴파일 방법을 특정하는 클래스명과 메소드명

 

 

[Java] 자바 가비지 컬렉션 기초(Garbage Collection Basic)

자바 개발자라면 '가비지 컬렉션(Garbage Collection)'에 대해서 고민하게 되는 순간이 온다. 토이 프로젝트나 작은 프로젝트에서는 가비지 컬렉션에 대한 관심이 적다. 가비지 컬렉터의 선택이 성능

hbase.tistory.com

 

댓글