개발자의 길

tomcat ThreadPool 본문

9. TOMCAT

tomcat ThreadPool

자르르 2009. 12. 24. 17:07



참조 : http://wiki.kldp.org/KoreanDoc/html/Tomcat-KLDP/Tomcat-KLDP-12.html

 

Tomact 은 multi-thread 된 servlet container로서

클라이언트측의 각각의 요청이 쓰레드에 의해 실행되고. Tomcat 3.2 이전 버젼에서는 클라이언트측의 각 요청이 도착할 때마다, 쓰레드가 생성되어 각 요청을 처리 하였다.

이러한 절차는 많은 부하를 일으키는 문제를 야기하였고

그후 3.2 버전부터 ThreadPool 를 사용하게 되었다고한다.

 

다음은  참조싸이트에 나와있는 톰캣의  Thread Pool 에 대한 설명이다.

 

a. 각 요청에 대해 쓰레드를 생성하여 사용하고 난 후 계속해서 재사용할
   수 있도록 사용된 쓰레드를 "open" 상태로 계속 유지하며 이를 관리한
   다. 관리되고 있는 쓰레드는 소멸되지 않고 계속 "open" 상태로 유지
   되고 있다가 다른 요청이 들어오면 관리되고 있는 쓰레드를 사용하여
   해당 요청을 처리하도록 한다. 다시 요청을 처리하고 난 쓰레드는 관리
   대상이 되어 관리되어 지며 또 다른 요청을 기다린다.
   
b. 이러한 방식은 각 요청에 대해 쓰레드를 생성하고 사용한 후 소멸되는
   반복적인 절차를 탈피하게 하며, 반복적인 쓰레드의 생성 및 소멸로
   인해 야기되는 문제를 해결한다.

c. Tomcat 3.2 부터는 Tomcat의 Admin이 단지 server.xml 파일에 Thread
   Pool 에 대한 설정만으로 위의 사항을 해결할 수 있도록 하며, 자신의
   사이트에 맞도록 쓰레드의 제한 사항등을 조정할 수 있게 한다.

d. 동시에 사용할 수 있는 쓰레드의 상한선, idle 상태의 쓰레드에 대한
   최대 쓰레드 갯수 및 톰캣 기동시 생성될 최소한의 쓰레드 수를 설정
   할 수 있다.

 

위의 글을 보고 현재 내가 사용하는 tomcat6 버전에는  몇개의 ThreadPool을 가지고 있고

최대 몇개의 thread를 사용하도록 되어있는지 바로 확인해보았다.

server.xml를 까보니 다음과 같이 나와있다..

 

<!--The connectors can use a shared executor,

    you can define one or more named thread  pools-->
 <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->

 <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->

 <!-- A "Connector" using the shared thread pool -->   

 

     <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" 

               redirectPort="8443" /> 

 

default로 설정되는  8080포트는  tomcatThreadPool 를 사용하고 있고

tomcatThreadPool 은 동시 사용가능한 150개의 thread를 생성할수있고(maxThreads

최초 풀 생성시 4개 쓰레드로 (minSpareThreads) 상태로 시작하며

최소한 4개의 쓰레드 이상을 유지하는구나..  

그런데 idle 상태의 쓰레드가 몇개 이상이면  쓰레드 삭제한다는 maxSpareThreads는

선언되어 있지않다.  그래서 더 찾아보니     

maxSpareThreads는 사라지고  maxIdleTime 을 지정하게 되어있었다.

그리고... 위의  maxThreads 150 minSpareThreads 4 라는 숫자는 낙씨였다.

주석이 되어있으니 적용은 안되고  default 값이 예제로 나온건줄 알았는데..

default값은  maxThreads 200 minSpareThreads 25 란다..

더자세한 내용은 아래 링크인  tomcat doc문서에서 executor(thread pool)부분을 보시라..ㅋ

http://tomcat.apache.org/tomcat-6.0-doc/config/executor.html 



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments