1. 소개
이 예제에서는 Apache Tomcat, Glassfish Server 및 Oracle Weblogic과 같은 Java 웹 애플리케이션 서버의 스레드 풀 구성을 살펴봅니다.
2. 서버 스레드 풀
서버 스레드 풀 은 배포된 애플리케이션의 웹 애플리케이션 서버에서 사용 및 관리됩니다.이러한 스레드 풀은 웹 컨테이너 또는 서블릿 외부에 존재하므로 동일한 컨텍스트 경계에 종속되지 않습니다.
응용 프로그램 스레드와 달리 서버 스레드는 배포된 응용 프로그램이 중지된 후에도 존재합니다.
3. 아파치 톰캣
먼저 server.xml 의 Executor 구성 클래스 를 통해 Tomcat의 서버 스레드 풀을 구성할 수 있습니다 .
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="25"/>
minSpareThreads 는 시작 시를 포함하여 가장 작은 풀입니다. maxThreads 는 서버가 요청을 대기열에 올리기 전에 가장 큰 풀입니다 .
Tomcat의 기본값은 각각 25와 200입니다. 이 구성에서는 스레드 풀을 기본값보다 약간 작게 만들었습니다.
3.1. 임베디드 톰캣
마찬가지로 애플리케이션 속성을 설정하여 스레드 풀을 구성하도록 Spring Boot용 임베디드 Tomcat 서버 를 변경할 수 있습니다 .
server.tomcat.max-threads=250
Boot 2.3부터 속성이 다음과 같이 변경되었습니다.
server.tomcat.threads.max=250
4. 글라스피쉬
다음으로 Glassfish 서버를 업데이트하겠습니다.
Glassfish는 Tomcat의 XML 구성 파일인 server.xml 과 달리 admin 명령을 사용합니다 . 프롬프트에서 다음을 실행합니다.
create-threadpool
create-threadpool 에 maxthreadpoolsize 및 minthreadpoolsize 플래그를 추가할 수 있습니다 . Tomcat minSpareThreads 및 maxThreads 와 유사하게 작동합니다 .
--maxthreadpoolsize 250 --minthreadpoolsize 25
풀로 돌아가기 전에 스레드가 유휴 상태일 수 있는 시간을 지정할 수도 있습니다.
--idletimeout=2
그런 다음 끝에 스레드 풀의 이름을 제공합니다.
asadmin> create-threadpool --maxthreadpoolsize 250 --minthreadpoolsize 25 --idletimeout=2 threadpool-1
5. 웹로직
Oracle Weblogic은 WorkManager를 사용하여 자체 조정 스레드 풀을 변경할 수 있는 기능을 제공합니다.
스레드 대기열과 유사하게 WorkManager는 스레드 풀을 대기열로 관리합니다. 그러나 WorkManager는 실시간 처리량을 기반으로 동적 스레드를 추가합니다. Weblogic은 스레드 활용도를 최적화하기 위해 정기적으로 처리량에 대한 분석을 수행합니다.
이것은 우리에게 무엇을 의미합니까? 즉, 스레드 풀을 변경할 수 있지만 웹 서버는 궁극적으로 새 스레드를 생성할지 여부를 결정합니다.
Weblogic Admin Console에서 스레드 풀을 구성할 수 있습니다.
업데이트 자체 튜닝 최소 스레드 풀 크기 및 셀프 튜닝 스레드 최대 풀 크기 값은 WorkManagers에 대한 최소 및 최대 경계를 설정합니다.
통지 스턱 스레드 최대 시간 과 스턱 스레드 타이머 간격 값을. 이는 WorkManager가 멈춘 스레드를 분류하는 데 도움이 됩니다.
때로는 오래 실행되는 프로세스로 인해 스레드가 막힐 수 있습니다. WorkManager는 이를 보완하기 위해 스레드 풀에서 새 스레드를 생성합니다. 이 값을 업데이트하면 프로세스가 완료되는 데 걸리는 시간이 길어질 수 있습니다.
멈춘 스레드는 코드 문제를 나타낼 수 있으므로 해결 방법을 사용하는 것보다 항상 근본 원인을 해결하는 것이 가장 좋습니다.
6. 결론
이 빠른 기사에서는 애플리케이션 서버 스레드 풀을 구성하는 여러 방법을 살펴보았습니다.
애플리케이션 서버가 다양한 스레드 풀을 관리하는 방법에는 차이가 있지만 유사한 개념을 사용하여 구성됩니다.
마지막으로, 웹 서버의 구성 값을 변경하는 것은 성능이 떨어지는 코드와 잘못된 애플리케이션 디자인에 대한 적절한 수정이 아니라는 점을 기억하십시오.