web-dev-qa-db-ja.com

Tomcat用のNIO / APRコネクタのmaxThreadsの最適なサイズを決定するにはどうすればよいですか?

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"   
        />
  1. Tomcat用のNIO/APRコネクタのmaxThreadsの最適なサイズを決定するにはどうすればよいですか?

  2. MaxThreadsの適切な初期値は何ですか?

7
confile

OOTB構成は通常、コネクタごとに合計150〜200の受け入れスレッドです。このデフォルトは、「平均的な」ハードウェアで中程度の負荷/複雑さのアプリケーションを対象としています。

一般的な経験則として、軽量で高性能のアプリケーションは、CPUコアあたり最大150(受け入れ)スレッドを使用することを検討する必要があります(4コアボックスで合計600)。より保守的な設定では、より重いアプリケーションの場合、300受け入れスレッドになります。私はほとんどの要件が真ん中あたりになることを期待しています(しかし、これにはいくつかの分析が必要になります)が、これは非常に状況的なものです-@zagrimsanの回答を参照してください。

明らかに、HTTPSのオーバーヘッドはわずかに高いため、標準的な方法では、それに応じて受け入れスレッドの数を減らします。

APR /ネイティブコネクタを使用するとスループットが向上しますが、通常、制限要因はアプリケーションプロファイルであるため、マジックナンバーはありません。

高すぎるスレッド設定を使用することの危険性は、サーバーが「ターミナルビジー」になる可能性があることです。この場合、スレッドとアプリケーションの要求の管理に多くの時間が費やされ、他のすべてが影響を受けます(特にGCが1つの症状です)。直感に反するように見えますが、一般的には少ないほど良いです。

スレッド数が正しく構成されたビジー状態のサーバーは、高負荷時に正常に低下します。高すぎると倒れます!

現在、いくつかの関連する設定(受け入れカウント、最小スレッド、待機など)がありますが、これらも合わせて調整する必要がありますが、これはこの回答の範囲を超えています。

7
Michael