web-dev-qa-db-fra.com

Tomcat - maxThreads vs maxConnections

Dans Tomcat server.xml, qu'est-ce que maxThreads et maxConnections?

Je comprends que maxConnections est le nombre de connexions ouvertes sur le serveur.

Et maxThreads est le nombre maximal de threads de traitement des demandes

Mais comment les deux paramètres de configuration fonctionnent ensemble, évidemment, vous ne définissez pas maxConnections sur 1000 et maxThreads sur 10

Quelle est la relation entre les deux paramètres de configuration?

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

Tomcat peut fonctionner dans 2 modes:

  • [~ # ~] bio [~ # ~] - blocage d'E/S (un thread par connexion)
  • [~ # ~] nio [~ # ~] - E/S non bloquantes (beaucoup plus de connexions que de threads)

Tomcat 7 est BIO par défaut , bien que le consensus semble être "n'utilisez pas Bio car Nio est meilleur à tous égards". Vous définissez ceci en utilisant le paramètre protocol dans le server.xml fichier.

  • BIO sera HTTP/1.1 ou org.Apache.coyote.http11.Http11Protocol
  • NIO sera org.Apache.coyote.http11.Http11NioProtocol

Si vous utilisez BIO, je pense qu’ils devraient être plus ou moins les mêmes.

Si vous utilisez NIO, alors "maxConnections = 1000" et "maxThreads = 10" pourraient même être raisonnables. Les valeurs par défaut sont maxConnections = 10 000 et maxThreads = 200. Avec NIO, chaque thread peut servir n'importe quel nombre de connexions, en alternant mais en conservant la connexion, de sorte que vous n'avez pas besoin de faire tout le handshaking habituel, ce qui prend beaucoup de temps avec HTTPS, mais pose même un problème avec HTTP. Vous pouvez ajuster le paramètre "keepAlive" pour conserver les connexions plus longtemps, ce qui devrait accélérer les choses.

93
Tim Cooper

De documentation Tomcat , Pour bloquer les E/S (BIO), la valeur par défaut de maxConnections est la valeur de maxThreads sauf si Executor ( pool de threads) est utilisé. Dans ce cas, la valeur "maxThreads" de Executor sera utilisée à la place. Pour les E/S non bloquantes, cela ne semble pas dépendre de maxThreads.

7
Swapnil