[Tomcat] Executor (Thread Pool)


 [ Tomcat 공식문서 한글번역 링크 ]


[ 소개 ]

- Executor 는 Tomcat 의 컴포넌트 간에 공유할 수 있는 Thead Pool 을 나타낸다.
- 이전에는 Connector 마다 개별 Thread Pool 이 생성되었지만 Executor 를 통해 주로 Connector 의 Thread Pool 을 공유할 수 있을 뿐 아니라 Excutor 지원하도록 구성하여 다른 컴포넌트간에도 Thraed Pool 을 공유할 수 있다.

- Executor 는 org.apache.catalina.Executor 인터페이스를 구현해야 한다.

- Executor 는 Service 의 내부 중첩 요소로 나타내며, Connector 가 이를 인식하려면 server.xml 에서 Executor 요소가 Connector 보다 앞에 있어야 한다.


[ 추가설명 ]

- Connector 의 개별 Thread Pool 을 사용하면 되는데 굳이 Executor 를 구성해서 Connector 에서 Thread 를 Pool 에서 공유해야 하는 어떠한 이유가 있을까 생각해봤는데 잘 모르겠다.
Tomcat_6 에도 있는 기능으로 보아 예전에는 서버의 사양이 낮았으니 리소스를 최대한 효율적으로 사용하기 위해 해당 기능이 있는게 아닐까 싶다.
지금은 굳이 써야할 필요가 있을까 싶다.

- server.xml 내용 확인 시 아래와 같이 Executor 설정은 기본적으로 주석처리 되어있다.



[ 속성 ]

1. 공통 속성

- 모든 Executor 의 구현체는 다음 속성을 지원한다.

속성 설명
className org.apache.catalina.Executor 인터페이스를 구현한 클래스 이름 (기본값: orag.apache.catalina.core.StandardThreadExecutor)

해당 인터페이스는 객체가 name 속성을 통해 참조될 수 있고, Lifecyle 을 구현하여 컨테이너와 함께 시작/중지 될 수 있도록 보장한다.
name
(필수)
server.xml 파일의 다른곳에서 이 Pool 에 접근할때 참조할 이름이며, 중복되지 않는 고유한 이름으로 필수로 지정해야 한다.

1004lucifer

2. 표준 구현 속성

- 이 구현체는 플랫폼 Thread Pool 을 사용하여 Executor 에 할당된 작업을 실행하며, className 속성이 org.apache.catalina.core.StandardThreadExecutor 이어야 한다.

- 표준 구현은 다음 속성을 지원한다.

속성 설명
threadPriority (int)
이 Thread 의 우선순위 (기본값: 5, Thread.NORM_PRIORITY 상수값)
daemon (boolean)
Thread 가 데몬 쓰레드인지 여부 (기본값: true)
namePrefix (String)
Executor 가 생성하는 각 Thead 이름의 접두사 (기본값: tomcat-exec-)
각 Thraed 의 이름은 namePrefix+threadNumber 형식을 따른다.
maxThreads (int)
이 Pool 의 최대 Active Thread 개수 (기본값: 200)
minSpareThreads (int)
항상 유지되는 최소 (Idle+Active) Thread 개수 (기본값: 25)
maxIdleTime (int - 밀리초)
Idle Thrad 가 종료되기 전까지의 시간 (기본값: 60000, 1분)
Active Thread 가 minSpareThreads 와 같거나 적은경우 종료되지 않는다.
maxQueueSize (int)
실행 대기중인 (작업)태스크의 최대 대기열 크기 (기본값: Integer.MAX_VALUE)
대기열이 초과되면 태스크가 거부된다.
threadRenewalDelay (long - 밀리초)
ThreadLocalLeakPreventionListener 가 구성된경우 이 Executor 는 중지된 Context 에 대해서 알림을 받으며, Pool 의 Thread 가 갱신된다.
모든 Thread 가 동시에 갱신되는 것을 방지하기 위해 Thread 간에 갱신 지연시간을 설정할수 있다. (기본값: 1000, 1초)
음수값으로 설정하면 Thread 가 갱신되지 않는다.



[ 가상 Thread 구현체 ]

- 이 구현체는 Executor 에 할당된 각 태스크를 실행하기 위해 새로운 가상 Thead 를 사용한다.
- className 속성에 org.apache.catalina.core.StandardVirtualThreadExecutor 로 설정해야 한다.

- 가상 Therad 구현체는 다음 속성을 지원한다.

속성 설명
namePrefix (String)
Executor 가 생성하는 각 Thead 이름의 접두사 (기본값: tomcat-virt-)
각 Thraed 의 이름은 namePrefix+threadNumber 형식을 따른다.


[ 추가설명 ]
- 가상 Thread 를 사용하려면 JDK 21 이상을 사용해야 한다.


참고
 - https://tomcat.apache.org/tomcat-11.0-doc/config/executor.html


댓글