제2장 domain.xml의 스케줄러(Scheduler) 설정

여기에서 JEUS 도메인의 메인 설정 파일인 domain.xml에서 스케줄러에 관련된 태그에 대한 설명을 찾을 수 있다.

2.1. 소개

레퍼런스는 다음 형식으로 구성되어 있다.

  1. XML Schema/XML 트리: XML 설정 파일의 모든 태그 리스트를 정리했다. 각 노드의 형식은 다음과 같다.

    1. 태그 레퍼런스로 빨리 찾아보기 위해서 각 태그마다 인덱스 번호( 예: (11) )를 붙여 놓았다. 태그 레퍼런스에서는 이 번호 순서로 설명한다.

    2. XML Schema에서 정의한 XML 태그명을 <tag name> 형식으로 표시한다.

    3. XML Schema에서 정의한 Cardinality를 표시한다. “?” = 0개나 1개의 element, “+” = 1개 이상의 element, “*” = 0개 이상의 element, (기호가 없음) = 정확히 1개의 element

    4. 몇몇 태그에는 “P” 문자를 붙여 놓았는데, 해당 태그는 성능에 관계되는 태그라는 것을 뜻한다. 이 태그는 설정을 튜닝할 때 사용된다.

  2. Element Reference: 트리에 있는 각 XML 태그를 설명한다.

    1. Dynamic: 동적 설정 반영 가능

    2. Non-Dynamic: 동적 설정 반영 불가능, Dynamic이 설정되지 않은 항목들이 보통 이에 해당 하나 특별히 설명이 있는 경우 이 항목이 표시된다.

    3. Description: 태그에 대한 간단한 설명.

    4. Value Description: 입력하는 값과 타입.

    5. Value Type: 값의 데이터 타입. (예: String)

    6. Value Type Description: 값의 데이터 타입에 대한 설명

    7. Default Value: 해당 XML을 사용하지 않았을 때 기본적으로 사용되는 값.

    8. Defined Value: 이미 정해져 있는 값.

    9. Example: 해당 XML 태그에 대한 예.

    10. Performance Recommendation: 성능 향상을 위해서 추천하는 값.

    11. Child Elements: 자신의 태그 안에 사용하는 태그.

2.2. XML Schema/XML 트리

2.3. Element Reference

(967) <domain> <servers> <server> <scheduler>
Description JEUS Scheduler에 관련된 사항을 설정한다.
Value Type schedulerType
Child Elements

(968) enabled?

(969) pooling?

(982) job-list?

(968) <domain> <servers> <server> <scheduler> <enabled>
Description Scheduler 서비스의 구동 여부를 지정한다.
Value Type boolean
Default Value true

(969) <domain> <servers> <server> <scheduler> <pooling>
Description Scheduler에서 멀티 스레드로 Job을 실행할 때 사용하는 Thread Pool을 설정한다.
Value Type thread-poolingType
Child Elements

(970) shared

(972) dedicated

(970) <domain> <servers> <server> <scheduler> <pooling> <shared>
Dynamic 동적 변경이 가능하다.
Description 서버 전반적으로 공유할 Thread Pool을 사용한다.
Value Type shared-poolType
Child Elements

(971) reserved-thread-num?

(971) <domain> <servers> <server> <scheduler> <pooling> <shared> <reserved-thread-num>
Dynamic 동적 변경이 가능하다.
Description 서버 전반적으로 공유할 Thread Pool을 사용하는 경우 다른 서비스가 스레드를 모두 점유하면 스레드 할당을 받지 못할 수 있다. 따라서 특별히 이 서비스를 위한 스레드를 미리 할당하고 싶을 경우에 설정한다. 설정값은 다른 서비스 들과 합산했을 때 System Thread Pool의 최댓값을 넘지 않도록 해야 한다.
Value Type nonNegativeIntType
Value Type Description 0 이상의 Int 값이다.
Default Value 0

(972) <domain> <servers> <server> <scheduler> <pooling> <dedicated>
Dynamic 동적 변경이 가능하다.
Description 서비스별 전용 Thread Pool을 사용한다.
Value Type dedicated-poolType
Child Elements

(973) min?

(974) max?

(975) keep-alive-time?

(976) queue-size?

(977) stuck-thread-handling?

(973) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <min>
Dynamic 동적 변경이 가능하다. [Basic]
Description Thread Pool에서 관리하는 스레드 수의 최솟값이다.
Value Type nonNegativeIntType
Value Type Description 0 이상의 Int 값이다.
Default Value 0

(974) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <max>
Dynamic 동적 변경이 가능하다. [Basic]
Description Thread Pool에서 관리하는 스레드 수의 최댓값이다. [Default Value]: 기본값은 10개이다. (System Pool의 기본값은 100이다).
Value Type nonNegativeIntType
Value Type Description 0 이상의 Int 값이다.
Default Value 10

(975) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <keep-alive-time>
Dynamic 동적 변경이 가능하다.
Description Min 이하의 스레드에 대해서 설정된 시간 동안 사용되지 않는다면 자동적으로 Thread Pool에서 제거된다. 0이면 제거하지 않는다. [Default Value]: 기본값은 1분이다. (System Pool의 기본값은 300000이다).
Value Description 밀리세컨드 단위로 설정한다.
Value Type nonNegativeLongType
Value Type Description 0 이상의 Long 값이다.
Default Value 60000

(976) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <queue-size>
Description Thread Pool이 처리하는 업무 개체를 저장하는 Queue의 크기를 지정한다.
Value Type nonNegativeIntType
Value Type Description 0 이상의 Int 값이다.
Default Value 4096

(977) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <stuck-thread-handling>
Dynamic 동적 변경이 가능하다.
Description 스레드가 특정 업무 때문에 일정 시간 이상 계속 점유된 상태일 경우, 해당 스레드에 대해서 특정 액션을 취하기 위한 설정이다.
Value Type stuck-thread-handlingType
Child Elements

(978) max-stuck-thread-time?

(979) action-on-stuck-thread?

(980) stuck-thread-check-period?

(981) user-warning-class?

(978) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <stuck-thread-handling> <max-stuck-thread-time>
Dynamic 동적 변경이 가능하다
Description 스레드를 Stuck Thread로 판단하는 기준이 되는 값을 설정한다. 설정된 시간 이상 계속 점유된 상태이면 해당 스레드를 Stuck Thread로 간주한다. [Default Value]: 기본값은 1시간이다.
Value Description 밀리세컨드 단위로 설정한다.
Value Type nonNegativeLongType
Value Type Description 0 이상의 Long 값이다.
Default Value 3600000

(979) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <stuck-thread-handling> <action-on-stuck-thread>
Dynamic 동적 변경이 가능하다.
Description Stuck Thread로 판단된 경우 그 쓰레드에 대해 특정 액션을 취하기 위한 설정이다. [Default Value]: 기본값은 아무 액션도 취하지 않는 None이다. (System Pool의 기본값은 IgnoreAndReplace이다.)
Value Type action-on-stuck-threadType
Default Value None
Defined Value

None

Interrupt

IgnoreAndReplace

Warning

(980) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <stuck-thread-handling> <stuck-thread-check-period>
Dynamic 동적 변경이 가능하다
Description Stuck Thread 의 상태를 체크하는 주기를 설정한다. [Default Value]: 기본값은 5분이다.
Value Description 밀리세컨드 단위로 설정한다.
Value Type nonNegativeLongType
Value Type Description 0 이상의 Long 값이다.
Default Value 300000

(981) <domain> <servers> <server> <scheduler> <pooling> <dedicated> <stuck-thread-handling> <user-warning-class>
Description action-on-stuck-thread를 Warning으로 설정된 경우에 default는 thread dump를 찍어주도록 되어있으나, 사용자가 원하는 작업을 할 수 있도록 직접 클래스를 작성하고 싶을 때 이 설정을 사용한다. 해당 클래스는 jeus.util.pool.Warning를 반드시 implement 해야 하며, jeus.util.pool.Warning interface는 jclient.jar에서 찾을 수 있다. 클래스를 작성한 후에 사용하고 싶은 대상 서버의 SERVER_HOME/lib/application에 위치시킨다.
Value Description fullyQualifedClass 이름을 사용한다. ex) test.stuck.UserWarning
Value Type string

(982) <domain> <servers> <server> <scheduler> <job-list>
Description Scheduler에 등록할 Job List을 지정한다.
Value Type job-listType
Child Elements

(983) job*

(983) <domain> <servers> <server> <scheduler> <job-list> <job>
Description Scheduler에 등록할 하나의 Job을 지정한다.
Value Type jobType
Child Elements

(984) name

(985) class-name

(986) interval

(991) description?

(992) begin-time?

(993) end-time?

(994) count?

(984) <domain> <servers> <server> <scheduler> <job-list> <job> <name>
Description Job의 이름을 지정한다(ID에 대한 Validation작업이 필요).
Value Type valuableToken

(985) <domain> <servers> <server> <scheduler> <job-list> <job> <class-name>
Description Job을 수행하는 클래스의 Fully Qualified Name을 설정한다.
Value Type valuableToken

(986) <domain> <servers> <server> <scheduler> <job-list> <job> <interval>
Description Job이 수행되는 주기를 지정한다.
Value Type intervalType
Child Elements

(987) millisecond

(988) minutely

(989) hourly

(990) daily

(987) <domain> <servers> <server> <scheduler> <job-list> <job> <interval> <millisecond>
Description 주기를 밀리세컨드 단위로 지정한다.
Value Type long

(988) <domain> <servers> <server> <scheduler> <job-list> <job> <interval> <minutely>
Description 주기를 분 단위로 지정한다.
Value Type nonNegativeIntType
Value Type Description 0 이상의 Int 값이다.

(989) <domain> <servers> <server> <scheduler> <job-list> <job> <interval> <hourly>
Description 주기를 시간 단위로 지정한다.
Value Type nonNegativeIntType
Value Type Description 0 이상의 Int 값이다.

(990) <domain> <servers> <server> <scheduler> <job-list> <job> <interval> <daily>
Description 주기를 날짜 단위로 지정한다.
Value Type nonNegativeIntType
Value Type Description 0 이상의 Int 값이다.

(991) <domain> <servers> <server> <scheduler> <job-list> <job> <description>
Description Job의 설명을 입력할 수 있다.
Value Type valuableToken

(992) <domain> <servers> <server> <scheduler> <job-list> <job> <begin-time>
Description Job의 시작시간을 지정한다. 설정되지 않으면 Job은 바로 시작된다. 입력 양식은 xs:dateTime type에 따른다.
Value Type dateTime
Example 2020-01-01T03:20:01

(993) <domain> <servers> <server> <scheduler> <job-list> <job> <end-time>
Description Job의 종료시간을 지정한다. 설정되지 않으면 Job은 종료되지 않는다. 입력 양식은 xs:dateTime type에 따른다.
Value Type dateTime
Example 2020-01-01T03:50:20

(994) <domain> <servers> <server> <scheduler> <job-list> <job> <count>
Description Job의 수행 횟수를 지정한다.
Value Type long
Default Value -1

2.4. Scheduler domain.xml 파일 예제

[예 2.1] Scheduler domain.xml 파일 예제

<?xml version="1.0"?>
<domain>
  <servers>
    <server>
      <!-- server Scheduler Service -->
      <scheduler>
        <enabled>true</enabled>

        <!-- Scheduler Thread-pool settings -->
        <pooling>
            <shared>
                <reserved-thread-num>5</reserved-thread-num>
            </shared>
        </pooling>

        <!-- Jobs to be executed after booting -->
        <job-list>
          <job>
            <class-name>sample.scheduler.ScheduleJob</class-name>
            <name>My Task</name>
            <description>
                This task runs in every 30 minutes
            </description>
            <begin-time>2005-02-01T09:00:00</begin-time>
            <end-time>2005-02-28T23:59:59</end-time>
            <interval>
              <minutely>30</minutely>
            </interval>
            <count>-1</count>
          </job>
        </job-list>
      </scheduler>
    </server>
  </servers>
</domain>