javatomcat

Tomcat - maxThreads vs. maxConnections


In Tomcat's server.xml what is maxThreads versus maxConnections?

I understand that maxConnections is the number of connections open to the server.

And maxThreads is the maximum number of request processing threads .

But how do these two configuration parameters work together? -- Obviously you will not set maxConnections to 1000 and maxThreads to 10.

What is the relationship between the two configuration parameters?

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

Solution

  • Tomcat can work in 2 modes:

    Tomcat 7 is BIO by default, although consensus seems to be "don't use BIO because NIO is better in every way". (And BIO has been completely thrown out of 8.5.0 and later versions.) You set this using the protocol parameter in the server.xml file.

    If you're using BIO then I believe they should be more or less the same.

    If you're using NIO then actually maxConnections=1000 and maxThreads=10 might even be reasonable. The defaults are maxConnections=10000 and maxThreads=200. With NIO, each thread can serve any number of connections, switching back and forth but retaining the connection so you don't need to do all the usual handshaking which is especially time-consuming with HTTPS but even an issue with HTTP. You can adjust the "keepAlive" parameter to keep connections around for longer and this should speed everything up.