Tomcat-maxThreadsとmaxConnections


82

Tomcatではserver.xml何がmaxThreadsmaxConnections

maxConnectionsサーバーに対して開いている接続の数であることを理解しています

そして、maxThreads要求処理スレッドの最大数です

しかし、2つの構成パラメーターがどのように連携するか、明らかmaxConnectionsに1000とmaxThreads10に設定することはありません

2つの構成パラメーターの関係は何ですか?

<Connector 
    port="8443" 
    protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="250" 
    SSLEnabled="true" 
    scheme="https" secure="true"
    clientAuth="false" 
    sslProtocol="TLS" 
    connectiontimeout="20000"
/>

回答:


116

Tomcatは2つのモードで動作できます:

  • BIO – I / Oのブロック(接続ごとに1つのスレッド)
  • NIOノンブロッキングI / O(スレッドよりも多くの接続)

Tomcat 7デフォルトBIOですが、コンセンサスは「Nioはあらゆる点で優れているため、Bioを使用しないでください」と思われます。これは、ファイルのprotocolパラメーターを使用して設定server.xmlます。

  • BIOはHTTP/1.1またはorg.apache.coyote.http11.Http11Protocol
  • NIOは org.apache.coyote.http11.Http11NioProtocol

あなたがBIOを使用しているなら、私はそれらが多かれ少なかれ同じであるべきだと信じています。

NIOを使用している場合は、実際には「maxConnections = 1000」と「maxThreads = 10」が妥当な場合もあります。デフォルトはmaxConnections = 10,000およびmaxThreads = 200です。NIOを使用すると、各スレッドは任意の数の接続を処理でき、前後に切り替えますが、接続は保持されるため、HTTPSで特に時間がかかり、HTTPでさえ問題となる、通常のハンドシェイクをすべて実行する必要はありません。「keepAlive」パラメータを調整して、接続をより長く維持することができます。これにより、すべてが高速化されます。


デフォルトのプロトコルは、自動切り替えメカニズムを使用する「HTTP / 1.1」のようです(tomcat.apache.org/tomcat-7.0-doc/config/http.html)を使用して「...ブロッキングJavaベースのコネクタまたはAPR /ネイティブベースのコネクタ。PATH(Windows)またはLD_LIBRARY_PATH(ほとんどのunixシステム)環境変数にTomcatネイティブライブラリが含まれている場合、APR /ネイティブコネクタが使用されます。ネイティブライブラリが見つからない場合は、ブロッキングJavaベースのコネクタが使用されます。 「使用されます
アルパ

13

Tomcatのドキュメントから、I / O(BIO)をブロックする場合、デフォルト値maxConnectionsはの値です。maxThreadsただし、Executor(スレッドプール)が使用されている場合は、Executorの「maxThreads」の値が代わりに使用されます。ノンブロッキングIOの場合、に依存していないようですmaxThreads


7
私は反対派ではありませんが、あなたは質問に答えていないと思います。質問者に概念を教えることなく、デフォルトが何であるかを説明しただけであり、問​​題は概念についてです。
ティムクーパー

2
とった。実際の意味ではなく、両者の関係を問う質問をしました。
Swapnil 2014

1
この回答は、BIOを使用しても、maxConnectionsがmaxThreadsよりも大きくなる可能性があることを明確にしているため(これはTomcat 7では新しいと思います)
Ivan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.