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 | 컴파일 방법을 특정하는 클래스명과 메소드명 |
댓글