프로그래밍공부(Programming Study)/개발-자바(JAVA)

jstack과 jcmd의 차이 – JVM 진단 도구 완전 정리

Chann._.y 2025. 9. 21.
728x90

Java 애플리케이션을 운영하다 보면 CPU 점유율이 갑자기 치솟거나, 특정 스레드가 응답하지 않는 문제가 발생할 때가 있습니다.
이럴 때 JVM 내부 상태를 진단하는 가장 대표적인 도구가 jstackjcmd입니다.

이번 글에서는 두 명령어의 차이와 활용법을 정리해보겠습니다.


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

참고 자료


다음 글에서는 실제로 jstackjcmd Thread.print출력 예시를 비교하면서, 어떤 상황에서 어떤 도구를 쓰면 좋은지 사례를 정리해보겠습니다.

728x90

댓글