Thread Dump와 Heap Dump

carlkim·2024년 1월 11일
0

자바기본

목록 보기
7/8

Thread Dump와 Heap Dump란 무엇인가?

Thread dump(스레드 덤프)와 Heap dump(힙 덤프)는
Java 가상 머신 (JVM) 환경에서 발생하는 문제 해결과 성능 최적화를 위해 사용되는 도구입니다.

Thread Dump (스레드 덤프):

정의:

스레드 덤프는 JVM 내에서 실행 중인 모든 스레드의 현재 상태와 활동을 나타내는 정보를 수집한 것입니다.

활용:
주로 다중 스레드 환경에서 발생하는 데드락, 무한 루프, 스레드 경합 등의 문제를 해결하기 위해 사용됩니다.

수집 방법:

1) 시그널 (시그널을 통해 JVM에 명령을 보냄)
2) JVisualVM, JConsole과 같은 모니터링 도구 사용
명령행 도구(jstack, kill 명령 등)를 이용한 수동 수집

JPS 명령으로 현재 실행 중인 JAVA 프로세스의 목록과 각 프로세스의 PID를 확인할 수 있다

jps

jstack 명령을 사용하여 Thread Dump 수집

jstack [pidnumber]

thread Dump 정보를 파일로 저장하고 필요하면 공유하거나 분석을위해 보관할 수 있다.

jstack [pidnumber] > thread_dump.txt

분석: 스레드 덤프는 각 스레드의 스택 트레이스(stack trace)를 제공하여 어떤 작업을 수행하고 있는지 확인할 수 있습니다.

Heap Dump (힙 덤프):

정의:
힙 덤프는 JVM의 힙 메모리 내용을 스냅샷으로 저장한 것으로, 객체의 상태 및 메모리 사용량에 대한 정보를 포함합니다.

활용: 주로 메모리 누수, 메모리 소비가 높은 객체, 불필요한 객체 등을 분석하여 메모리 관리 및 최적화에 사용됩니다.

수집 방법:
1) JVisualVM, JConsole과 같은 툴을 사용하여 수동으로 수집
2) HeapDumpOnOutOfMemoryError JVM 옵션을 사용하여 OutOfMemoryError가 발생할 때 자동으로 수집하도록 설정
3) 프로그램 코드 내에서 명시적으로 HeapDump를 수행하는 API를 사용

jmap 으로 메모리 맵을 출력하고 heap 덤프를 생성 한다.

jmap -dump:file=<파일경로> <pidnumber>

mat 툴로 힙덤프 분석 가능

https://eclipse.dev/mat/downloads.php

JVM 옵션으로 HEAP DUMP 수집

OutOfMemoryError 발생 시 자동 수집

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<파일경로>

분석: 힙 덤프는 객체의 수, 크기, 클래스 정보, 참조 관계 등을 보여주므로 메모리 누수의 원인을 찾고 해결하는 데 도움이 됩니다.

profile
기본부터 가면 됩니다.

0개의 댓글