Tomcat - maxThreads frente a maxConnections

81

En Tomcat server.xmllo que es maxThreadsversusmaxConnections

Entiendo que maxConnectionses la cantidad de conexiones abiertas al servidor

Y maxThreadses el número máximo de subprocesos de procesamiento de solicitudes

Pero cómo funcionan los dos parámetros de configuración juntos, obviamente no lo establecerá maxConnectionsen 1000 y maxThreadsen 10

¿Cuál es la relación entre los dos parámetros de configuración?

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

Respuestas:

115

Tomcat puede funcionar en 2 modos:

  • BIO : bloqueo de E / S (un hilo por conexión)
  • NIO : E / S sin bloqueo (muchas más conexiones que subprocesos)

Tomcat 7 es BIO por defecto , aunque el consenso parece ser "no use Bio porque Nio es mejor en todos los sentidos". Establece esto usando el protocolparámetro en el server.xmlarchivo.

  • BIO será HTTP/1.1oorg.apache.coyote.http11.Http11Protocol
  • NIO será org.apache.coyote.http11.Http11NioProtocol

Si está utilizando BIO, creo que deberían ser más o menos iguales.

Si está utilizando NIO, en realidad "maxConnections = 1000" y "maxThreads = 10" podrían ser incluso razonables. Los valores predeterminados son maxConnections = 10,000 y maxThreads = 200. Con NIO, cada subproceso puede servir cualquier número de conexiones, cambiando de un lado a otro pero conservando la conexión, por lo que no necesita hacer todo el protocolo de enlace habitual, que consume mucho tiempo con HTTPS, pero incluso es un problema con HTTP. Puede ajustar el parámetro "keepAlive" para mantener las conexiones durante más tiempo y esto debería acelerar todo.

Tim Cooper
fuente
12

De la documentación de Tomcat , Para bloquear E / S (BIO), el valor predeterminado de maxConnectionses el valor de a maxThreadsmenos que se use Executor (grupo de subprocesos), en cuyo caso, se usará el valor de 'maxThreads' de Executor. Para E / S sin bloqueo, no parece depender de maxThreads.

Swapnil
fuente
7
No soy el votante negativo, pero creo que no ha respondido la pregunta. Simplemente ha explicado cuáles son los valores predeterminados, sin enseñarle los conceptos al autor de la pregunta, y la pregunta es sobre los conceptos.
Tim Cooper
2
Entendido. Tomé la pregunta como planteando la relación entre ellos en lugar de lo que realmente significan.
Swapnil
1
Esta respuesta también fue útil, ya que aclara que incluso con BIO, maxConnections puede ser mayor que maxThreads (creo que esto es nuevo en Tomcat 7)
Ivan