WAS/WebLogic

[개요] 웹로직 셀프튜닝(Self Tuning) 이해

투칼론 2015. 5. 14. 12:50
반응형

 

1. 셀프튜닝(Self-Tuning) 개요

 

웹로직 서버 9 버전에서 새로 추가된 기능이다. 8.1 버전까지는 여러 개의 실행 큐(executed queue)를 기반으로 클라이언트 요청을 관리하고 실행하였다. 하지만 대부분 고객들은 애플리케이션 별도 실행 큐를 생성하지 않고 디폴트 큐인 "weblogic.kernel.default"이름을 가진 1개 실행 큐를 통해 처리하였다.

이러한 디폴트 큐 또는 신규로 생성한 실행 큐는 시스템 부하정도와 처리량(Throughput)에 상관없이 설정된 Executed Thread 갯수 값을 사용하였다.  

실행 큐(Execute Queue)마다  스레드 풀(Thread Pool)을 적절하게 설정하는 것이 쉽지 않으며, 최적의 Execute Thread 개수 값을 정하는 것이 쉽지 않았다. 

이러한 단점을 해결하기 위해 웹로직 서버 9 버전에서 단일 스레드 풀("weblogic.kernel.default(self-tuning)")을 사용한 처리량(throughput)을 최적화하기 위해 동적으로 스레드 풀의 크기를 조절한다.

조절기준은 기존 경험치를 가지고 Execute Thread 수가 늘어나면, 처리량이 증가하는지, 감소하는지를 판단하여 크기를 동적으로 결정하는 방식이다.

1개의 우선 순위 기반(Priority-Based) 큐를 기반으로 성능과 처리량을 최적화하기 위해 웹로직 자체적으로 튜닝(Self Tuning)으로 실행 스레드(Execute Thread) 개수를 동적으로 변경하면서 요청을 처리하는 메커니즘을 말한다.

 

2. 셀프튜닝(Self-Tuning) 메커니즘

아래 그림과 같은 메커니즘과 특징을 가지고 있다. 
  • 모든 Work Manager가 우선 순위 기반 큐(Priority-based Queue)와 셀프튜닝 스레드 풀(Self-tuning Thread Pool)을 공유한다.
  • 스레드 풀 크기는 웹로직 커널에 의해 자동으로 결정되고 조정된다. 스레드 풀 크기는 처리량(throughput)과 기존 처리 기록을 참조하여 결정한다.
  • Work Manager는 정의된 파라미터 기반(Request class, Constraints)에서 작동된다.
 

 

Work Manager는 아래와 같은 구성요소를 포함한다.

  • Request Class
    • Fair Share 
    • Response-Time Goal
    • Context based
  • Constraints
    • Minimum Threads Constraint
    • Maximum Threads Constraint
    • Capacity Constraint

 

3. 설정 방법 및 예제

 

아래와 같은 3가지 범위(Scope)의 Work Manager를 가지고 있다.

 

 

 Scope 설명
 The default Work Manager 별도 지정하지 않으면 디폴트 Work Manager를 사용한다. 모든 어플리케이션이 동일한 조건에서 실행된다.
디폴트 Work Manager 대신에 아래의 Work Manager를 설정하는 경우는 어플리케이션 마다 실행 가중치를 다르게 지정이 필요하거나, 응답시간(response time)을 보장이 필요한 어플리케이션이 있거나, 다른 어플리케이션 때문에 데드락을 방지하기 위해 최소 thread 개수를 보장하고 싶은 경우 등이다.
 Global Work Managers config.xml에 정의된 Work Manager로서 모든 어플리케이션에서 참조하여 사용할 수 있다.
 Application-scoped Work Managers 어플리케이션 레벨에 정의된 Work Manager. 관리 콘솔 또는 각 배포 어플리케이션 유형(EAR,JAR,WAR)에 맞는 배포 디스크립터에 지정할 수 있다. 

 

 

만약에 Work Manager를 명시적으로 생성할 필요가 있다면, 개인적으로는 관리 용이성을 위해서 Global Work Managers를 생성 후에, 각 어플리케이션 배포 디스크립터에서는 <wl-dispatch-policy> 엘리멘트를 통해 Global Work Manager를 참조할 것을 권장한다.

 

[예제] Work Manager 설정 (config.xml)

<work-manager>

<name>highpriority_workmanager</name>

   <fair-share-request-class>

      <name>high_priority</name> 

      <fair-share>100</fair-share> 

   </fair-share-request-class>

   <min-threads-constraint>

      <name>MinThreadsCountFive</name>

      <count>5</count>

   </min-threads-constraint>

</work-manager>

 
 

[예제] Web Application (WAR)을 위한 Work Manager 참조 (weblogic.xml)

<init-param>
   <param-name>wl-dispatch-policy</param-name>
   <param-value>highpriority_workmanager</param-value>
</init-param>
 

 

4. self-tuning 풀 크기값 설정 옵션

 

Default Work Manager의 초기 설정값을 지정함으로써 초기에 스레드 수를 조정하는 오버헤드를 줄일수도 있다. 설정은 아래와 같이 3가지 방법이 있다.

1) 관리콘솔에서 설정

서버명 >> 구성 >> 튜닝 >> 고급(Advanced)에서 아래 값을 설정하면 됨

 

Self Tuning Thread Minimum Pool Size:   기본값 1

Self Tuning Thread Maximum Pool Size:   기본값 400

 

2) config.xml 수정 방법

   <server>      <name>AdminServer</name>      <self-tuning-thread-pool-size-min>100</self-tuning-thread-pool-size-min>      <self-tuning-thread-pool-size-max>200</self-tuning-thread-pool-size-max>      [...]      </server>  

 

3) 웹로직 기동 옵션 설정 방법

 -Dweblogic.SelfTuningThreadPoolSizeMin=100    -Dweblogic.SelfTuningThreadPoolSizeMax=200
 

5. 기존 8.1버전의 Execute Thread 모델 사용 방안

 

Work Manager를 이용한 셀프 튜닝 대신에 기존 8.x 버전과 같이 사용하려면, 아래와 같은 두가지 방법이 있다.

  • 웹로직 기동시에  -Dweblogic.Use81StyleExecuteQueues=true  옵션 지정  또는, 
  • config.xml 파일에 "use81-style-execute-queues" 옵션을 true로 설정하면 된다.
. <server> <name>myserver</name> <use81-style-execute-queues>true</use81-style-execute-queues> <listen-address/> </server>  

위의 예제처럼 <name></name> 태그 위에 설정하는 것을 권장한다.

위와 같이 설정하면 웹로직 웹 관리 콘솔에서 해당 서버의 "Configuration"을 클릭하면, "Queue"라는 탭이 보여져, 8.1 이하 버전에서 설정한 파라미터 항목이 보인다.

 

[참고자료]

http://aleung.github.io/blog/2012/08/10/understanding-weblogic-workmanager/

http://docs.oracle.com/