WAS/WebLogic

[TroubleShooting] 스레드(Thread) 이해 및 덤프(dump)

투칼론 2015. 5. 14. 09:13
반응형

1. 자바 스레드(Thread)란?

 

스레드(Thread)는 어떠한 프로그램 또는 프로세스에서 실행되는 흐름의 단위라고 할 수 있다. 웹로직과 같은 WAS는 이러한 프로세스 대신에 작은 흐름 단위의 스레드를 생성하여 클라이언트 요청을 멀티스레드(multithread) 방식으로 처리한다.

프로세스에 비해 스레드 방식은 메모리를 공유하기 때문에 적은 자원으로 빠른 성능을 보장하기 때문에 대부분 WAS에서는 스레드 이해와 스레드 덤프에 대해 이해를 해야 한다.

 

2. 스레드 상태

스레드를 이해하고, 스레드 덤프를 분석하기 위해서는 덤프 내용에 있는 스레드별 상태(아래 표 참조)를 이해해야 한다. 스레드 상태는 아래 다이어그램과 같다.  

 

 

 

 상태 설명 
 NEW  스레드는 생성되었으나, 아직 실행하지 않고 있음
 RUNNABLE  태스크를 수행하고, CPU를 사용 중임
 BLOCKED  모니터 락(Monitor Lock)을 획득하기 위해 다른 스레드가 락(Lock)을 해제하기 기다림
 WAITING  스레드가 wait, join, park 메쏘드를 통해 기다림
 TIMED_WAITING  스레드가 sleep, wait, join, park 메쏘드를 통해 기다림. WAITING과 유사하나, 다른 점은 최대 대기 시간(maximum waiting time)이 메쏘드에 지정되어 있음
 TERMINATED  스레드가 종료됨 

 

3. 웹로직에서 스레드 모니터링 화면에서 상태

웹로직 콘솔을 통해 스레드 상태를 모니터링 할 수 있는데, 웹로직 측면에서 스레드 상태와 각각 의미는 아래 표와 같다.

 상태 설명 
 Idle Threads  요청하면 처리 가능한 스레드
 Active Threads  요청을 처리하고 있는 스레드 (위 Idle Threads 수도 포함)
 Standby Threads  Sleep 상태로서 처리하고 있지 않는 스레드
 Stuck Threads  다른 스레드가 작업처리가 끝나기를 기다리고 있는 스레드. Stuck Threads 때문에 데드락(Deadlock)이 발생할 수 있음
 Hogging Threads  시간이 오래 걸리는 스레드. 일반적으로 Stuck 상태로 가기 전에 Hogging 상태가 됨. 

[참고] 웹로직 콘솔에서 "Execute Thread Total Count"는 Active Threads + Standby/Stuck/Hogging Threads수 임.

 

아래 그림은 웹로직 콘솔에서 스레드 모니터링하는 화면이다.

 

4. 스레드(Thread) 덤프(dump) 방법

 

아래와 같이 세가지 방법으로 스레드 덤프를 할 수 있다. 기본적으로 아래 명령어로 스레드 덤프하면 표준 출력(stdout)으로 출력된다. nohup 으로 redirection하였으면 당연히 redirection한 파일에 출력된다.

1) jstack  [pid]

  UNIX/LINUX/Windows에서 사용할 수 있음

2) kill -QUIT [pid] 또는 kill -3 [pid]

 UNIX/LINUX에서 사용할 수 있음

3) "CTRL+Break"

Windows에서 사용할 수 있음

 

5. 스레드(Thread) 덤프 분석

Hotspot VM 기준으로 덤프는 아래와 같은 내용들이 포함된다. 
  • Thread Name
  • Thread type & priority -  예) daemon prio=3 
  • Java Thread ID -  예) tid=0x000000011e52a800
  • Native Thread ID - OS 모니터링 툴에서 프로세스/스레드는 이 Thread ID와 매핑됨. 예) nid=0x251c
  • Java Thread 상태와 상세정보 -  예) waiting for monitor entry [0xfffffffea5afb000] java.lang.Thread.State: BLOCKED (on object monitor)
  • Java Stack Trace
 

6. 기타

스레드 덤프(Thread Dump) 포맷 : https://blueyikim.tistory.com/1207

스레드 덤프 분석 툴/사이트 : https://blueyikim.tistory.com/2416

Stuck Thread 확인하는 방법 : https://blueyikim.tistory.com/705