Determining the best configuration for concurrency is dependent upon the application running on Tomcat.
Because every application is so different, there are no general guidelines for how many instances you setup on different kinds of hardware, but there is a way to determine how your application will best run on your given hardware.
To determine what is the best config:
1. You need some sort of load test or measurement of performance
2. Start out with one instance, the reason for this is simplicity. Have this instance setup with maxThreads="400"
3. Run the load test
![]()
For development and operations teams, a presentation that covers performance tuning Tomcat and the JVM alongside configuration options, load balancing, and more.
In this webinar, Apache Tomcat committers Mark Thomas and Filip Hanik discuss performance tuning Apache Tomcat for your production environment. This webinar focuses on Tuning Tomcat and the JVM to correctly handle your application including usage patterns, hardware and network topology. You’ll learn when and how to apply the different tuning and configuration options as well as understanding load balancers and how they can impact your configuration settings. Also discussed: the impact of clustering and replication on your environment.
The DisableReuse + JKOption is recommended because of how mod_jk handles connections. Typically the DisableReuse option is recommended when there are issues with keeping a connection alive.
mod_jk has built in health checks:
connect_timeout prepost_timeout
Both of them do the same thing. They send a PING to Tomcat. Tomcat responds with a PONG. And only then the connection is used as it is considered healthy.
Why active threads remain high after load decreases using the Blocking IO connector
There are a number of different http connectors that can be used with Tomcat. They are:
• Blocking IO
• Non-blocking IO
• Native/Apache Portable Runtime (APR)
The blocking IO connector is the default http connector. With this connector each request is handled by a dedicated thread (obtained from a pool) until the request is complete at which point the thread is returned to the pool to be re-used by another request.
Popular Links