WEB WAS/미들웨어

Thread Dump, Heap Dump (시스템 장애 시 분석)

chanstory 2023. 6. 7. 14:50
반응형

자바 어플리케이션 실행 중 장애 발생 시 원인을 찾을 수 있는 방법은 여러가지가 있다.

 

로그분석, 스레드 덤프 & 힙덤프 분석, 예외 핸들링,  성능 모니터링, 코드 검토, 모니터링 툴 활용 등이 있다.

 

이 중 스레드 덤프와 힙 덤프에 대해 알아보고자 한다.

 

Thread Dump 란?

=> 실행 중인 Java 어플리케이션의 모든 스레드 상태 출력

=> 어플리케이션이 멈춤 상태에서 생성

=> 어플리케이션의 데드락(Deadlock) 이나 스레드 문제를 분석하거나 성능 문제를 해결하는 데 도움 됨

=> 스레드 덤프 생성 시 PID (Process ID)를 알아야 함

* 덤프 생성

==> kill -3 <PID> 명령어를 통하여 덤프를 생성한다 . (Visual VM 으로도 획득 가능)

==> 덤프에는 표준출력(stdout), 로그파일(catalina.out, stout.log)에 기록됨

==> PID 획득 방법 : ps -ef 

* 스레드 덤프 내용

"pool-1-thread-13" prio=6 tid=0x000000000729a000 nid=0x2fb4 runnable [0x0000000007f0f000]

// "pool-1-thread-13" : 스레드 이름
// prio=6 : 우선순위
// tid=0x000000000729a000 nid=0x2fb4 : 스레드 ID
// runnable [0x0000000007f0f000] : 스레드 상태

 

* 참고

=> 스레드 덤프는 획득 당시의 스레드 상태만 알 수 있기 때문에

     상태 변화 확인을 위해 5초 간격으로 5~10회 정도 획득 하는 것이 좋음

 

* 스레드 덤프 유형별 패턴

https://d2.naver.com/helloworld/10963

 

 

 

 

Heap Dump 란?

=> Java 어플리케이션의 메모리 상태를 스냅샷 형태로 저장

=> 메모리 누수(Memory Leak)나 객체분석에 유용(메모리 누수 발생 시 주기적으로 재기동 하며 clear 시켜주며 로그 확인)

=> 힙 덤프 생성 시 PID를 알아야 함 

* 덤프 생성

==> jmap -dump:format=b,file=<dump-file> <PID> 명령어를 통해 덤프 생성

==> ' <dump-file> ' 는 생성된 힙 덤프 파일의 경로와 이름을 지정

        ex) $ jamp -dump:live,format=b,file=/tmp/dump.hprof [PID]

                              :live = 동작중인 인스턴스만 캡쳐

=> $ export IBM_HEAPDUMP=true 또는 export IBM_HEAP_DUMP=true 옵션 설정 필요

==> 일반적으로 .hprof 확장자를 가짐

** OOM (Out Of Memory) 발생 시 자동 생성

==> oracle : java -XX:HeapDumpOnOutOfMemoryError 옵션 필요

==> IBM : export JAVADUMP_OUTOFMEMORY=true 옵션 필요

 

 

추가로

GC Log 란?

=> Garbage Collector 동작과 메모리 관리에 대한 로깅 정보 제공

=> GC 로그는 메모리 할당, 객체 수집, 힙 크기 등과 관련된 세부 정보를 기록하여 어플리케이션의 메모리 사용량 및 GC 성능을 분석함

* 로그 생성

==> Java 어플리케이션을 실행할 때 JVM 인자(-Xloggc:<log-file> 또는 -verbose:gc 등) 를 사용하여 GC 로그를 활성화

==> <log-file> 은 생성된 GC 로그 파일의 경로와 이름 짖ㅇ

 

GC 로그 읽는법 

 

 

Dump 모니터링 툴

VisualVM - Java 어플리케이션의 실행 상태, 메모리 사용, 스레드, GC 등을 모니터링 할 수 있음
- 스레드 덤프, 힙 덤프, CPU 프로파일링 등 제공
GC Viewer - GC 로그 파일을 읽어 이벤트, 메모리 사용, 시간 등을 그래프로 표시해줌
Eclipse Memory Analyzer - Heap Dump 를 분석하고 메모리 누수, 객체 참조 문제, 큰 객체 등을 식별할 수 있음

 

 

 

참고

https://hpotter1993.tistory.com/24

 

 

 

반응형