Tomcat - maxThreads vs maxConnections

81

In Tomcat, server.xmlwas ist maxThreadsversusmaxConnections

Ich verstehe, dass dies maxConnectionsdie Anzahl der Verbindungen ist, die zum Server geöffnet sind

Und maxThreadsist die maximale Anzahl von Anforderungsverarbeitungsthreads

Aber wie die beiden Konfigurationsparameter zusammenarbeiten, werden Sie natürlich nicht maxConnectionsauf 1000 und maxThreads10 einstellen

Welche Beziehung besteht zwischen den beiden Konfigurationsparametern?

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

Antworten:

115

Tomcat kann in 2 Modi arbeiten:

Tomcat 7 ist standardmäßig BIO , obwohl der Konsens zu lauten scheint: "Verwenden Sie Bio nicht, weil Nio in jeder Hinsicht besser ist". Sie legen dies mit dem protocolParameter in der server.xmlDatei fest.

  • BIO wird HTTP/1.1oder seinorg.apache.coyote.http11.Http11Protocol
  • NIO wird sein org.apache.coyote.http11.Http11NioProtocol

Wenn Sie BIO verwenden, sollten sie meiner Meinung nach mehr oder weniger gleich sein.

Wenn Sie NIO verwenden, sind "maxConnections = 1000" und "maxThreads = 10" möglicherweise sogar sinnvoll. Die Standardeinstellungen sind maxConnections = 10.000 und maxThreads = 200. Mit NIO kann jeder Thread eine beliebige Anzahl von Verbindungen bedienen, hin und her wechseln, aber die Verbindung beibehalten, sodass Sie nicht das übliche Handshake ausführen müssen, was bei HTTPS besonders zeitaufwändig ist, sondern sogar ein Problem bei HTTP. Sie können den Parameter "keepAlive" anpassen, um die Verbindungen länger aufrechtzuerhalten, und dies sollte alles beschleunigen.

Tim Cooper
quelle
12

In der Tomcat-Dokumentation ist für das Blockieren von E / A (BIO) der Standardwert von maxConnectionsder Wert von, maxThreadssofern nicht Executor (Thread-Pool) verwendet wird. In diesem Fall wird stattdessen der Wert von 'maxThreads' von Executor verwendet. Für nicht blockierende E / A scheint dies nicht abhängig zu sein maxThreads.

Swapnil
quelle
6
Ich bin nicht der Downvoter, aber ich denke, Sie haben die Frage nicht beantwortet. Sie haben lediglich die Standardeinstellungen erklärt, ohne dem Fragesteller die Konzepte beizubringen, und die Frage bezieht sich auf die Konzepte.
Tim Cooper
2
Ich habs. Ich nahm die Frage als Frage nach der Beziehung zwischen ihnen und nicht nach dem, was sie tatsächlich bedeuten.
Swapnil
1
Diese Antwort war auch nützlich, da sie klarstellt, dass maxConnections selbst mit BIO größer sein kann als maxThreads (ich denke, dass dies in Tomcat 7 neu ist)
Ivan