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

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

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

2. 스레드 상태

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

- 스레드 상태 다이어그램

- 스레드 상태 설명

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

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

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

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

웹로직 콘솔에서 스레드 모니터링하는 화면예시

4. Thread Dump 분석 필요한 경우

- 스레드의 현재상태, 스레드간의 경합(waited/waiting), Deadlock 확인 가능

- 시스템 CPU 사용율이 높을 때 활용

- 스레드 동기화시

공유자원을 여러스레드가 사용하는 경우 정합성을 보장하려면 한번에 하나의 스레드만 공유자원에 접근할 수 있게 해야 한다. Java에서는 Monitor를 이용해서 스레드를 동기화한다. 모든 Java 객체는 하나의 Minitor를 가지고 있고, Monitor는 동시에 하나의 스레드만 소유할 수 있다. 어떤 스레드가 소유한 Monitor를 다른 스레드가 획득하려면 해당 Monitor를 소유하고 있는 스레드가 Monitor 를 해제할 때까지 Wait Queue에서 대기하고 있어야 한다

5. 스레드(Thread) 덤프(dump) 수집 방법

- kill -3 명령어를 일정 시간간격으로 약 3회 수행한다.

※ Thread Dump 파일 위치

$LOG_HOME/nohup_instance명.log 에 stack trace 형식으로 함께 로깅됨

6. 스레드(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

7. 스레드 분석툴 

- IBM Thread and Monitor Dump Analyzer for Java (TMDA) 

- 실행방법 java -jar jca4614.jar

태그: ,

카테고리:

업데이트:

댓글남기기