なぜ私のTomcat 6 executorスレッドプールがコネクタで使用されていないのですか?
-
02-10-2019 - |
質問
私の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="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 Managerでは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は、指示されているにもかかわらず、HTTP-8080も執行者を使用していないようです。マネージャーはただ誤って報告していますか、それともスレッドプールを正しくセットアップしていませんか?
解決
私の推測では、マネージャーは、コネクタの定義の一部として設定された値を報告しており、執行者からの値を報告していません。執行者は予想通りに働いていますが、マネージャーで正しく報告されていません。
AJPコネクタの200値はここで誤解を招きます。 maxThreads
(定義されています ここ);あなたが指定しなかったからです maxThreads
AJPコネクタの場合、これは使用される値です。
HTTPコネクタは、スレッド管理を執行者に委任しているため、ナンセンス値を報告しています。
これがすべて本当かどうかを確認するには、変更してみてください maxThreads
異なる価値に対する執行者の価値。君は見るべきだ maxThreads
AJPコネクタは200にとどまる(デフォルト値だから)。
他のヒント
このコネクタによって作成されるリクエスト処理スレッドの最大数は、したがって、処理できる同時リクエストの最大数を決定します。指定されていない場合、この属性は200に設定されます。エグゼクタがこのコネクタに関連付けられている場合、コネクタは内部スレッドプールではなくエグゼクタを使用してタスクを実行するため、この属性は無視されます。この属性に設定された任意の値が正しく記録されますが、使用されていないことを明確にするために(JMXを介して)-1として報告されることに注意してください。