2010-05-03 41 views
2

我的server.xml如下所示:爲什麼我的Tomcat 6執行程序線程池沒有被連接器使用?

<!--The connectors can use a shared executor, you can define one or more named thread pools--> 
<Executor name="tomcatThreadPool" 
      namePrefix="catalina-exec-" 
      maxThreads="200" 
      minSpareThreads="4"/> 

<Connector executor="tomcatThreadPool" 
      port="8080" protocol="HTTP/1.1" 
      connectionTimeout="10000" 
      maxKeepAliveRequests="1" 
      redirectPort="8443" /> 

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

然而,在Tomcat管理器(http://localhost/manager/status)它顯示了以下

http-8080: Max threads: -1 Current thread count: -1 Current thread busy: -1 
jk-8009: Max threads: 200 Current thread count: 4 Current thread busy: 1 

出於某種原因,它看起來像HTTP-8080是不是使用執行器即使它也是直接執行的,並且jk-8009正在使用執行器,即使它沒有被指示。經理是否錯誤報告或者我沒有正確設置線程池?

回答

5

我的猜測是,管理器報告的值是作爲連接器定義的一部分設置的,並且不報告執行程序的值。執行者會按預期工作,只是在經理中沒有正確報告。

因爲200是默認值maxThreads(定義爲here),所以AJP連接器的200值在這裏有誤導性;因爲您沒有爲AJP連接器指定maxThreads,所以這是使用的值。

HTTP連接器報告無意義的值,因爲它將其線程管理委派給執行程序。

要檢查是否全部爲真,請嘗試將執行程序的maxThreads值更改爲其他值。您應該看到AJP連接器的maxThreads保持在200(因爲這是它的默認值)。

+0

看起來你是對的。謝謝您的幫助 – jwegan 2010-05-03 22:56:22

0

由此連接器創建的請求處理線程的最大數量,因此確定可以處理的最大併發請求數。如果未指定,則將此屬性設置爲200.如果執行程序與此連接程序關聯,則該屬性將被忽略,因爲連接程序將使用執行程序而不是內部線程池執行任務。請注意,如果配置了執行程序,則爲該屬性設置的任何值都將被正確記錄,但會將其報告(例如,通過JMX)爲-1以明確它未被使用。

相關問題