Have you noticed what a lack of information there is in the printed material (or on the web too, come to that!) on performance tuning Apache Tomcat? The subject came up briefly during the course that I completed yesterday, when we looked at the
changing the heap sizes and number of threads, and selecting
either the client or server JVM. Really it's one of those areas where I can't give you hard and fast rules for these parameters, and sometimes an apparantly contradictory setting will work wonders. For example, reducing the number of threads may increase performance as Tomcat concentrates on giving fast and furious service to a few customers at a time, rather that having hordes of them in the pipeline at the same time.
"Increase your cpu power, increase the memory" one of the books told us - and with the modern low price of hardware, that could be exactly the right message for some people. So could
"increase the bandwidth to the cpu" sometimes. But in each case, do check that you're pushing on the right bound. Looking at yesterday's case, the cpu was running at 100% and there was free memory available - so an extra few Gbytes would have sat idle; a move powerful cpu would have helped, as might
pulling other tasks off the same cpu.
"Should I
run multiple instances of Tomcat"? Maybe; on a single processor machine, it's going to be questionable whether you'll gain much. With multiple processors and one instance per processor, or with multiple hosts, then major throughput advances can be made. But once you have multiple instances of Tomcat running, you've got two extra complexites - how to share the load, and ensuring that the Tomcats stay syncronised in an appropriate way.
There's some
general load balancing and clustering information and some
more specific Apache load sharing information available via links. And whilst we don't run public Apache Tomcat tuning course, we have been known to cluster machines together, play with the settings, and bombard them with traffic to help a small group from a individual client understand the metrics of some of the factors I have mentioned. See
here for commercial details.
(written 2007-09-29, updated 2007-10-02)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
A901 - Replaced Page [1718] Increasing Java Virtual Machine memory for Tomcat - (2008-07-24)
[2079] Java - Memory Allocation and garbage collection - (2009-03-14)
[2272] Monitoring and loading tools for testing Apache Tomcat - (2009-07-07)
A900 - Web Application Deployment - Tomcat - Extra Features [934] Clustering, load balancing, mod_rewrite and mod_proxy - (2006-11-21)
[1006] Apache httpd and Apache Tomcat together tips - (2006-12-24)
[1121] Sharing the load with Apache httpd and perhaps Tomcat - (2007-03-29)
[1376] Choosing between mod_proxy and mod_rewrite - (2007-10-02)
[1377] Load Balancing with Apache mod_jk (httpd/Tomcat) - (2007-10-02)
[1383] Monitoring mod_jk and how it is load balancing - (2007-10-07)
[1896] Virtual Hosts and Virtual Servers - (2008-11-20)
[1899] Virtual Hosting under Tomcat - an example - (2008-11-22)
[1939] mod_proxy_ajp and mod_proxy_balancer examples - (2008-12-13)
[3018] Tuning Apache httpd and Tomcat to work well together - (2010-10-27)
A656 - Web Application Deployment - More Tomcat Configuration [282] Short weekend - (2005-04-17)
[466] Separating 'per instance' data from binaries and web sites - (2005-10-16)
A654 - Web Application Deployment - Configuring and Controlling Tomcat [837] Tomcat - Shutdown port - (2006-08-18)
[907] Browser -> httpd -> Tomcat -> MySQL. Restarting. - (2006-10-28)
[914] A practical example of roles - (2006-11-04)
[1351] Compressing web pages sent out from server. Is it worth it? - (2007-09-14)
[1503] Web page (http) error status 405 - (2008-01-12)
[1553] Automatic startup and shutdown of Tomcat - (2008-02-24)
[1762] WEB-INF (Tomcat) and .htaccess (httpd) - (2008-08-20)
[1943] Port and Glasses - (2008-12-14)
[1994] tomcat-users.xml; what a difference a space made - (2009-01-16)
[2039] The Invoker - (2009-02-13)
[2061] Tomcat 6 - Annotated Sample Configuration Files - (2009-03-01)
[2163] CATALINA_OPTS v JAVA_OPTS - What is the difference? - (2009-05-09)
[2652] Reading and writing cookies in Java Servlets and JSPs - (2010-02-26)
[3043] Gathering information - logging - with log4j. First steps. - (2010-11-12)
Some other Articles
Maidenhead Coffee ChallengeNew Month, New Quarter, New LawsA taster PHP expression ...Hotel in Melksham at ChristmasApache Tomcat Performance TuningOne business, four different angles!Getting the local voice heardkorn tips - some useful korn shell techniquesawk - a powerful data extraction and manipulation toolKorn Shell scripts on the web