본문 바로가기
INFRA/MW

heap dump & thread dump

by 근현대사 2023. 6. 15.
반응형

스레드 덤프(Thread dump)

실행 중인 프로그램의 모든 스레드에 대한 정보를 포함한 스택 트레이스(stack trace)를 출력하는 것을 말합니다. 스레드는 프로그램의 동시 실행 나타내는 작은 실행 단위입니다. 각 스레드는 프로그램의 다른 부분을 동시에 실행하고, 여러 스레드가 상호작용하면서 병렬 또는 동시에 작업을 수행할 수 있습니다.
스레드 덤프를 생성하면 각 스레드의 현재 상태와 실행 중인 메서드의 호출 스택 정보를 확인할 수 있습니다. 이를 통해 프로그램이 어떤 작업을 수행 중인지, 각 스레드가 어떤 메서드를 호출하고 있는지, 스레드 간에 어떤 상호작용이 발생하는지 등을 파악할 수 있습니다.
 
스레드 덤프는 주로 다음과 같은 상황에서 유용하게 활용됩니다:
 
  1. 데드락(Deadlock) 진단: 데드락은 스레드 간에 서로 기다리며 무한히 진행하지 못하는 상황을 의미합니다. 스레드 덤프를 분석하여 어떤 스레드가 어떤 리소스를 기다리고 있는지, 데드락 상태인지 확인할 수 있습니다.
  2. 성능 문제 분석: 스레드 덤프를 사용하여 병목 현상이나 장기간 실행되는 스레드를 식별할 수 있습니다. 이를 통해 프로그램의 성능을 향상시키기 위해 개선할 수 있는 부분을 찾을 수 있습니다.
  3. 예외 상황 분석: 프로그램이 예외를 발생시키는 상황이나 스레드의 비정상적인 종료 등의 문제가 발생한 경우, 스레드 덤프를 통해 예외가 발생한 스레드와 해당 예외가 발생한 위치를 확인할 수 있습니다.
 
스레드 덤프는 Java 가상 머신(JVM)이나 다른 프로그래밍 언어의 실행 환경에서 제공되는 도구나 명령을 사용하여 생성할 수 있습니다. 예를 들어, JVM에서는 jstack 명령을 사용하여 스레드 덤프를 생성할 수 있습니다.
 
 
 

스레드 덤프 생성방법 

  • 운영체제 도구 사용: Linux에서는 kill -3 <프로세스_ID> 명령을 사용하여 JVM 프로세스에 스레드 덤프를 생성할 수 있습니다.
  • JDK에 포함된 'jstack' 명령을 사용합니다. jstack <프로세스_ID>'를 실행합니다. 프로세스_ID는 대상 JVM의 프로세스 ID입니다.

힙 덤프(Heap dump)

JVM의 메모리 힙 영역의 상태를 스냅샷으로 저장한 것, 이는 프로그램 실행 중에 JVM이 사용하는 전체 메모리 내용을 이진 형식으로 덤프하여 저장하는 것을 말합니다. 힙 덤프는 메모리 사용량, 객체 인스턴스, 클래스 구조, 객체 간의 관계 등을 포함하고 있습니다.
힙 덤프는 주로 다음과 같은 상황에서 유용하게 사용됩니다
  1. 메모리 누수(Memory Leak) 분석: 힙 덤프를 통해 프로그램이 비정상적으로 많은 메모리를 사용하고 있는지 확인할 수 있습니다. 힙 덤프를 분석하여 메모리 누수가 발생하는 객체 인스턴스를 식별하고, 이를 해결하여 메모리 사용량을 최적화할 수 있습니다.
  2. 객체 분석: 힙 덤프를 통해 프로그램에서 생성된 객체의 정보를 확인할 수 있습니다. 객체의 상태, 속성, 참조 관계 등을 살펴봄으로써 프로그램의 동작과 객체 간의 상호작용을 분석할 수 있습니다. 이는 디버깅이나 성능 튜닝 작업에 유용합니다.
  3. 가비지 컬렉션(Garbage Collection) 분석: 힙 덤프를 통해 가비지 컬렉션의 동작을 확인할 수 있습니다. 객체의 수명 주기, 가비지 컬렉션의 효율성, 메모리 관리 등을 분석하여 가비지 컬렉션 알고리즘의 조정이나 튜닝을 수행할 수 있습니다.

힙 덤프 생성방법

  1. JDK의 jmap 명령어: JDK에 포함된 jmap 명령어를 사용하여 힙 덤프를 생성할 수 있습니다. 명령어를 실행하면 힙 덤프 파일이 생성되고, 이를 분석할 수 있습니다.
  2. 프로파일링 도구: 프로파일링 도구(예: YourKit, VisualVM 등)를 사용하여 힙 덤프를 생성할 수 있습니다. 도구의 인터페이스를 통해 힙 덤프 생성 옵션을 선택하고, 생성된 파일을 분석할 수 있습니다.
반응형

'INFRA > MW' 카테고리의 다른 글

[개발]중앙집중형 형상관리(CVCS)  (0) 2023.07.13
[오픈소스]젠킨스에 대해  (0) 2023.07.12
[JAVA] Servlet 서블릿에 대해  (0) 2023.07.06
[JAVA]JVM 메모리에  (0) 2023.06.22
WEB/WAS 란  (0) 2023.06.17