[ 소개 ]
- 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
댓글
댓글 쓰기