JVM 시리즈 - 문제 해결 도구
문제 해결 도구
jps: 가상 머신 프로세스 상태 도구
유닉스 ps 명령어에서 따온 jps 는 동작 중인 가상 머신 프로세스 목록을 보여준다. 다른 JDK 도구에서 모니터링할 가상 머신 프로세스를 명시하려면 LVMID 를 알아야 하는데, jps 를 사용해서 로컬 가상 머신 식별자(LVMID)를 알 수 있다.
1
2
3
jps [options] [hostid]
자주 쓰이는 jps 옵션은 다음과 같다.
-q: LVMID 만 출력
-m: 가상 머신 프로세스 시 시 main() 메서드에 전달된 매개 변수 출력
-l: 메인 클래스의 완전한 이름 출력
가상 머신 프로세스 시작 시 주어진 가상 머신 매개 변수 출력
jstat : 가상 머신 통계 정보 모니터링 도구
가상 머신의 다양한 작동 상태 정보를 모니터링하는데 사용한다. 명령어 형식은 다음과 같다.
1
2
3
jstat [option vmid [intervals]]
intervals 는 질의 횟수와 간격을 나타낸다. 즉, 상태를 모니터링하기 위해서 질의를 몇 초 간격으로 할지를 설정하는 것이다.
1
2
3
jstat -gc 2734 250 20
이는 2734 의 프로세스 id 를 가진 가상 머신에서 가비지 컬렉션 상태를 250 밀리초 간격으로 20 번 질의해서 가져오겠다는 것이다.
이외에도 클래스 로딩을 확인하기 위한 -class, 자바 힙 공간의 사용량을 확인하기 위한 -gccaspacity, 공간 사용률을 확인하기 위한 -gcutil 등등 다양한 옵션이 제공된다.
jinfo : 자바 설정 정보 도구
가상 머신의 다양한 매개 변수를 확인할 수 있다. 시작 시 명시한 매개 변수 목록을 보고 싶을 때는 -flag 매개 변수를 사용한다.
1
2
3
jinfo [options] vmid
다음은 매개 변수 ConcGCthreads 의 값을 출력하는 예시다.
1
2
3
4
jinfo -flag ConcGCThreads 1444
-XX:ConcGCThreads=2
jmap : 자바 메모리 매핑 도구
힙 스냅숏을 파일로 덤프해주는 자바용 메모리 맵 명령어다. 가상 머신을 구동할 때 -XX:+HeapDumpOnOutOfMemoryError 매개 변수를 사용하면 메모리가 오버플로될 때 가상 머신이 힙을 자동으로 덤프해주도록 할 수 있다.
1
2
3
jamp [options] vmid
각 옵션에는 힙의 스냅삿을 덤프하는 -dump, 사용중인 컬렉터, 매개 변수 설정 등 힙 관련 정보를 확인하기 위한 -heap 등이 있다.
jhap : 가상 머신 힙 덤프 스냅숏 분석 도구
덤프한 힙 스냅숏을 분석할 수 있다. jdk9 부터 jhsdb 가 이 역할을 대신한다. 작은 http 웹 서버를 내장하고 있어서, 분석이 끝나면 그 결과를 웹 브라우저로 확인할 수 있다. 그런데 이는 실무에서 많이 사용되지 않는데, 상용 분석 도구가 기능면에서 더 뛰어나기 때문이다.
jstack : 자바 스택 추적 도구
jstack 은 가상 머신의 스레드 스냅숏을 생성하는 데 쓰인다. 스레드 스냅숏은 가상 머신에서 실행중인 스레드의 메서드 스택이다. 스레드가 장시간 멈춰있을 때, 원인을 찾기 위해 생성한다.
1
2
3
jstack [options] vmid
각 스레드의 우선 순위, cpu 사용 기간, 생성 후 경과 시간, 스레드 상태, 메서드 호출 스택 등 다양한 정보를 알 수 있다. JDK5 부터, java.lang.Thread 클래스에 추가된 getAllSTackTraces 메서드로 가상 머신이 실행하는 모든 스레드의 StackTraceElement 객체를 얻을 수 있다.