JConsole
Jconsole은 Console은 자바 응용 프로그램의 모니터링과 관리를 위한 그래픽 사용자 인터페이스 도구로서
주로 Java 가상 머신(JVM)에서 실행 중인 애플리케이션의 성능 및 상태를 실시간으로 확인하고 진단하는 데 사용됩니다. JConsole은 Java Monitoring and Management API를 기반으로 하며
Java Development Kit(JDK)에 포함되어 있어 추가 설치가 필요 없습니다.
■ 실행방법
0. java를 설치합니다.
1. java 설치 폴더로 이동 합니다. ( 일반적으로 C:\Program Files\Java\jdkxxx\bin )
2. JConsole을 실행 시킵니다.
3. 실행중인 java process 를 찾습니다.
4. 윈도우 - 실행 - CMD 실행 후, 아래 명령어를 검색합니다
// 사용중인 프로세스 검색
netstat -a -o
// 포트로만 검색할 경우
netstat -a -o | findstr port
5. PID를 찾았으면 JConsole로 PID를 찾아서 실행해주시면 아래처럼 실시간 모니터링이 가능합니다 :)
https://www.youtube.com/watch?v=uCOtTv-dnGw
■ Jconsole 주요 지표
- Heap Memory Usage
Heap Memory는 JVM이 관린하는 동적 메모리 영역으로서, Java 객체와 배열이 저장되는 공간입니다.
또한 모든 스레드가 공유하는 메모리 영역으로서 크게 Young Generation 영역과 Old Generation 영역으로 나뉩니다.
( java 7 기준 )
Young Generation 영역에는 Eden 영역과 Survivor 영역이 있습니다.
Eden 영역에서 살아남은 객체는 Survivor 영역으로 이동하고
특정 횟수 이상 살아남은 객체는 Old Generation으로 이동합니다.
*살아남았다 함은 minor GC 에 대상이 되지 않은 사용중인, 참조중인 객체들을 의미합니다.
Old Generation 영역에서는 Young Generation에서 오래 살아남은 객체들이 존재하는 영역입니다.
* 해당 영역이 약 75 이상일때 보통 full GC가 일어납니다.
메모리에 대한 더 자세한 분석은 별도의 글을 통해 공유할 예정입니다.
( java 8부터 metaspace라는 공간이 추가 되었습니다. )
- 스레드 ( Threads )
스레드란 기본적으로 Java 애플리케이션의 실행 단위로서 프로그램의 병렬 처리를 가능하게 하는 단위입니다.
Jconsole에서는 아래 지표들을 확인 할 수 있습니다.
Live Thread Count: 현재 실행 중인 스레드 수
Peak: JVM 시작 이후 최대 스레드 수
Daemon: 데몬 스레드 수
Total Started: JVM 시작 이후 생성된 총 스레드 수
스레드 상태 :
1. NEW: 생성되었지만 아직 시작되지 않은 상태
2. RUNNABLE: 실행 중이거나 실행 대기 상태
3. BLOCKED: 모니터 락 획득을 위해 대기 중인 상태
4. WAITING: 다른 스레드의 작업이 끝나기를 기다리는 상태
5. TIMED_WAITING: 제한 시간 동안 대기하는 상태
6. TERMINATED: 실행이 종료된 상태
- 클래스(Classes)
클래스란 Java 프로그래밍의 기본 구성 단위로서 spring같이 의존성이 많은 framework를 사용한다면
10,000개 이상의 클래스가 로딩됩니다.
Loaded(로드된 클래스) : 현재 JVM에 로드된 클래스 수
- CPU Usage
CPU 사용률로서 전체 CPU 시간 중 작업 처리에 사용된 시간의 비율입니다. 과대한 GC 활동이나 무한루프 등이 발생하면 CPU 사용률이 증가합니다.
일시적으로 뛰는 CPU 사용률은 문제가 없을 수 있으나 지속적으로 높은 사용률은 문제가 될 수 있습니다.
CPU 시간의 구성 :
User Time: 사용자 프로세스 실행 시간
System Time: 커널/시스템 작업 시간
Idle Time: 유휴 시간
Wait Time: I/O 대기 시간
감사합니다.