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) 덤프 분석
- 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
'WAS > WebLogic' 카테고리의 다른 글
[Tips] WebLogic 유용한 유틸리티 (0) | 2015.07.08 |
---|---|
[Tips] 웹로직 관리자 패스워드 초기화 방법 (0) | 2015.05.26 |
[개요] 웹로직 셀프튜닝(Self Tuning) 이해 (0) | 2015.05.14 |
[개요] 클래스 로더(Class Loader) 이해 (0) | 2015.05.13 |
[Tips] WebLogic 11g 패치(Patch) 방법 (0) | 2015.03.10 |