Tomcat7のNIO/APRコネクタを使用しています。
例えば。
<Connector port="8080"
protocol="org.Apache.coyote.http11.Http11AprProtocol"
connectionTimeout="3000"
redirectPort="8443"
URIEncoding="UTF-8"
maxPostSize="0"
maxThreads="200"
enableLookups="false"
disableUploadTimeout="false"
maxKeepAliveRequests="-1"
useBodyEncodingForURI="true"
compression="on"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>
Tomcat用のNIO/APRコネクタのmaxThreadsの最適なサイズを決定するにはどうすればよいですか?
MaxThreadsの適切な初期値は何ですか?
OOTB構成は通常、コネクタごとに合計150〜200の受け入れスレッドです。このデフォルトは、「平均的な」ハードウェアで中程度の負荷/複雑さのアプリケーションを対象としています。
一般的な経験則として、軽量で高性能のアプリケーションは、CPUコアあたり最大150(受け入れ)スレッドを使用することを検討する必要があります(4コアボックスで合計600)。より保守的な設定では、より重いアプリケーションの場合、300受け入れスレッドになります。私はほとんどの要件が真ん中あたりになることを期待しています(しかし、これにはいくつかの分析が必要になります)が、これは非常に状況的なものです-@zagrimsanの回答を参照してください。
明らかに、HTTPSのオーバーヘッドはわずかに高いため、標準的な方法では、それに応じて受け入れスレッドの数を減らします。
APR /ネイティブコネクタを使用するとスループットが向上しますが、通常、制限要因はアプリケーションプロファイルであるため、マジックナンバーはありません。
高すぎるスレッド設定を使用することの危険性は、サーバーが「ターミナルビジー」になる可能性があることです。この場合、スレッドとアプリケーションの要求の管理に多くの時間が費やされ、他のすべてが影響を受けます(特にGCが1つの症状です)。直感に反するように見えますが、一般的には少ないほど良いです。
スレッド数が正しく構成されたビジー状態のサーバーは、高負荷時に正常に低下します。高すぎると倒れます!
現在、いくつかの関連する設定(受け入れカウント、最小スレッド、待機など)がありますが、これらも合わせて調整する必要がありますが、これはこの回答の範囲を超えています。