본문 바로가기
Server/WebLogic

[WebLogic] 서버 : 모니터링 : 스레드

by ojava 2015. 9. 22.
반응형

웹 서버로 WebLogic을 사용하는 사이트를 관리하게 되었는데

초기 세팅에 대한 포스팅을 쓰기도 전에...

모니터링 페이지에서 유심히 보게 되는 페이지가 있어서 먼저 정리할 겸 써보도록 한다.

 

 

WebLogic에서 제공하는 모니터링 페이지에서 관리할 수 있는 메뉴는 다음과 같다.


 모니터링 메뉴명

 관리내용

 특이사항

 일반

 서버에 대한 일반 런타임 정보 제공.

서버 활성화 시간, WebLogic Version, JAVA Version, OS Version 등 구동환경에 대한 정보 일체

 

 건전성 

 서버 건전성 정보와 하위 시스템별 상세 건전성 정보를 제공한다.

 서버 건전성이 정상 상태가 아닌 경우 해당 원인을 간단하게 표시함

 채널

 서버에서 접속가능한 채널별로 수신/전송 메시지 수와 바이트 정보를 확인할 수 있음

 

 성능

 서버 성능을 나타냄.

Java 가상 시스템 메모리 사용 통계를 확인 가능

JVM Heap 정보를 주로 보여줌.

 불필요한 정보 수집 또는 스레드 덤프를 강제로 수행할 수 있음

 스레드

 스레드 활동 정보 제공. 스레드 풀 상태에 대한 일반적인 통계와 개별 스레드 상세 내역 확인 가능

 스레드의 수명주기별 상태 확인 가능

 타이머

 서버에서 사용중인 타이머의 정보 표시

 

 작업 부하

 서버에 구성된 작업 관리자, 제약 조건 및 요청 클래스에 대한 통계 확인

 보류중인 요청, 완료된 요청 확인 가능. 스레드 최소/최대 제약조건 표시.

 작업

 예약된 작업 스케줄 확인 가능

 

 보안

 사용자 잠금 관리 통계 모니터링.

부적합한 로그인 횟수, 잠금 발생 총 건수, 잠금 기간 동안의 로그인 시도 횟수, 부적합 로그인 최대 수,

잠긴 사용자 수, 잠금 해제된 총 사용자 수

 허가되지 않은 로그인 확인이 가능하며 접근 인가자가 아닌 대상자 확인이 가능

 기본 저장소

 기본 저장소에 대한 런타임 통계 확인

상세내역 확인 가능 (deploy, transaction, wsee 등)

 생성수, 읽기수, 갱신수, 삭제수, 실제 읽기 수, 할당된 창 버퍼 바이트, 할당된 I/O 버퍼 바이트 표시

 JMS

 활성화 된 모든 JMS 접속에 대한 통계 확인

(JSM 접속 : 메시징 시스템에 열려있는 통신 채널)

 

 SAF

 모든 SAF 에이전트에 대한 통계

(SAF : Store and Forward)

 

 JDBC

 JDBC 데이터 소스와 연관된 통계 표시

연결된 JDBC와 상태, 평균/현재/최대 접속수 표시 

 

 JTA

 서버의 모든 리소스 유형에 대한 모든 트랜잭션 정보에 대해 요약하여 표시

 트랜잭션 정보 다수 탭으로 구성


 

 


모니터링에만 이렇게 많은 메뉴를 제공한다.

이렇게 많으니 정말 정리하느라 힘들어 좋군요



우선 지금 소개하기로 한 스레드 정보에서는 실제 업무를 수행하는 스레드 정보를

표시하게 되는데, 전체적인 통계와 더불어 상세 스레드 정보도 확인할 수 있습니다.


스레드 정보는 스레드의 생명 주기를 기준으로 분류하여 표시하게 되므로 

생명주기(Life Cycle)에 대한 내용도 아주 잠깐 얘기하고 넘어가자.



1. 신규 생성 (NEW) : 스레드 생성되었으나 실행되지 않은 상태

2. 실행 (RUNNABLE) : 실행중인 상태, CPU 사용 

2-1) BLOCKED : 다른 스레드가 걸어둔 Lock 해제를 기다리는 상태

2-2) WAITING : 의도적으로 스레드의 대기상태를 지시한 상태

2-3) TIMED_WAITING : 의도적으로 스레드의 대기상태 지시로 대기중임. 최대 대기시간이 지정되어있음.

3. 중단 (TERMINATED) : 스레드 종료


< 출처 : http://blueyikim.tistory.com/38 > 





기본적인 스레드 생명주기와 유사하게 WebLogic의 스레드 상태도 구분되어있다. 


1. 유휴 (Idle Threads) : 대기중인 스레드, 요청하면 처리 가능한 스레드

2. 실행 (Active Threads) : 요청을 처리중인 스레드. CPU 사용.

3. 대기 (Standby Threads) : Sleep 상태로 요청을 처리하지 않고 있는 스레드.

4. 호깅 (Hogging Threads) : 요청 처리에 시간이 오래 소요되는 스레드, Stuck Thread 직전의 상태로 보면 됨

5. 막힘 (Stuck Threads) : 작업 최대 시간보다 더 오랫동안 요청을 처리하고 있는 스레드. 이로 인해 데드락 발생 가능

    : 기본적으로 작업 최대 시간은 600초로 세팅되어있음


유휴 스레드와 대기 스레드는 둘 다 아무 요청에 대해 처리하지 않고 있다는 공통점이 있지만

실행 가능한 스레드이지만 작업이 지정되지 않으면 유휴 (Idle Thread)

실행 스레드가 활성 스레드 풀 안에 포함되어있지 않으면 대기 (Standby Thread) 로 구분된다.


-> 활성 스레드는 결국 유휴 스레드와 실행 스레드의 합계로 표현된다. (대기는 활성 스레드에 포함되지 않으므로)



일반적으로 다음과 같은 Life Cycle로 진행된다.


정상적인 진행 : Standby -> Active -> Standby

작업지연 시 진행 : Standby -> Active -> Hogging

작업 시간 초과 시 진행 : Standby -> Active -> Hogging -> Stuck

Stuck 상태 해제 시 진행 : Standby -> Active -> Hogging -> Stuck -> Standby


< 출처 : http://rajalo.tistory.com/entry/WLS-Thread-Health-State >





이 포스팅을 쓰게 된 것은 Hogging Thread 가 급격하게 많이 발생하여 알아보다가
모니터링 기능이 좋아서 정리하고자 작성하게 되었는데 Hogging 또는 Stuck Thread가 있는 경우
건전성에 경고를 띄우는 듯 하다. 


Hogging Thread에 대해서 계속 대기하는 상태로 있기 때문에 해당 Thread는 Kill 해줘야 한다.

이를 해결하기 위한 기능으로 WebLogic에서는 Thread Dump 기능을 제공한다.


이에 대해서는 별도로 정리하도록 하겠... 하고싶다.



반응형