728x90

Java 애플리케이션을 운영하다 보면 CPU 점유율이 갑자기 치솟거나, 특정 스레드가 응답하지 않는 문제가 발생할 때가 있습니다.
이럴 때 JVM 내부 상태를 진단하는 가장 대표적인 도구가 jstack과 jcmd입니다.
이번 글에서는 두 명령어의 차이와 활용법을 정리해보겠습니다.
1. jstack이란?
jstack은 JVM 프로세스의 스레드 덤프(Thread Dump)를 찍는 전용 도구입니다.
즉, 특정 시점에 모든 스레드가 어떤 코드를 실행 중인지 스냅샷을 남기는 데 사용합니다.
주요 특징
- 스레드 상태 분석 전용
- Deadlock, 무한 루프, GC Block 현상 진단에 유용
- 출력 포맷이 단순하고 가벼움
사용 예시
# <pid>는 대상 JVM 프로세스 ID
jstack <pid> > threaddump.txt
2. jcmd란?
jcmd는 JVM 진단을 위한 범용 명령어 인터페이스입니다.jstack, jmap, jinfo, jstat 등 다양한 기능을 통합한 만능 리모콘에 가깝습니다.
주요 특징
- 스레드 덤프는 물론, GC, 힙, JFR(Flight Recorder)까지 지원
- JVM 내부의 거의 모든 Diagnostic Command를 실행 가능
- 최신 JDK에서는 점점 jcmd 사용을 권장하는 추세
사용 예시
jcmd <pid> Thread.print # jstack과 동일하게 스레드 덤프 출력
jcmd <pid> GC.heap_info # 힙 메모리 사용량 출력
jcmd <pid> VM.system_properties # JVM System Properties 조회
3. jstack vs jcmd 차이 정리
| 항목 | jstack | jcmd |
|---|---|---|
| 목적 | 스레드 덤프 전용 | JVM 진단 종합 도구 |
| 기능 범위 | 스레드 상태 확인 | 스레드, GC, Heap, JFR, Properties 등 전체 JVM |
| 사용법 | jstack <pid> |
jcmd <pid> <command> |
| 출력 | 단순 스레드 스택 | 다양한 형식 (스레드, 힙, GC 등) |
| 현대적 대체 | jcmd Thread.print로 대체 가능 |
최신 JDK에서 권장 |
4. 실무 활용 팁
- 빠르게 스레드 덤프만 필요하다면 →
jstack - 다양한 JVM 진단을 한 곳에서 하고 싶다면 →
jcmd - 스크립트 자동화 및 운영 환경에서는
jcmd가 더 강력하고 범용적
5. 정리
jstack= 단순하고 가볍게 스레드 상태만 확인jcmd= JVM 전반을 아우르는 올인원 진단 도구
운영 환경에서 자주 쓰는 패턴은 다음과 같습니다.
# 스레드 덤프
jcmd <pid> Thread.print
# GC 힙 상태 확인
jcmd <pid> GC.heap_info
# 시스템 프로퍼티 확인
jcmd <pid> VM.system_properties
참고 자료
다음 글에서는 실제로 jstack과 jcmd Thread.print의 출력 예시를 비교하면서, 어떤 상황에서 어떤 도구를 쓰면 좋은지 사례를 정리해보겠습니다.
728x90
'프로그래밍공부(Programming Study) > 개발-자바(JAVA)' 카테고리의 다른 글
| 자바 버전별 특징 (0) | 2022.12.03 |
|---|---|
| 자바답게 프로그래밍하기 (0) | 2022.10.31 |
| [JAVA] W3C school java tutorial 정리 (0) | 2022.10.20 |
| (JAVA/자바)compareTo와 Comparator 그리고 정렬 (4) | 2022.02.20 |
| (JAVA/자바) 생성자와 초기화 (0) | 2022.02.20 |
댓글