Had a bad run in with firewalls using Apache 1.3 and AJP13. Thought the following 
changes might help the next victim.

Andrew Gilbert


Index: workershowto.xml
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-connectors/jk/xdocs/jk/workershowto.xml,v
retrieving revision 1.8
diff -u -r1.8 workershowto.xml
--- workershowto.xml    20 Sep 2002 21:35:30 -0000      1.8
+++ workershowto.xml    15 Nov 2002 20:41:40 -0000
@@ -170,8 +170,7 @@
 frequently used strings as small integers.
 </li>
 <li>
-ajpv13 reuse open sockets and leaves them open for future requests (remember when 
you've got a Firewall between your 
-WebServer and Tomcat).
+ajpv13 reuses open sockets and leaves them open for future requests. When you've got 
+a firewall between your WebServer and Tomcat you need to ensure these connections 
+aren't torn down during periods of inactivity. See <b>socket_keepalive</b> for more 
+information.
 </li>
 <li>
 ajpv13 has special treatment for SSL information so that the container can implement 
@@ -204,53 +203,36 @@
 </p>
 
 <p>
-<b>cachesize</b> property is usefull when you're using JK in multithreaded 
-web servers such as Apache 2.0, IIS and Netscape. They will benefit the most by 
-setting this value to a higher level (such as the estimated average concurrent users 
for Tomcat).
+<b>cachesize</b> property is useful when you're using JK in multithreaded 
+web servers such as Apache 2.0, IIS and Netscape. The default value is 1. 
+Multithreaded web servers will benefit by setting this value to a higher level, such 
+as the estimated average concurrent users for Tomcat. With forking model web servers 
+you probably want to use the default.
 </p>
 
 <p>
-<b>cache_timeout</b> property should be used with <b>cachesize</b> to specify how to 
time JK should keep
-an open socket in cache before closing it. This property should be used to reduce the 
number of threads 
-on the Tomcat WebServer.
+<b>cache_timeout</b> property should be used with <b>cachesize</b> to specify how 
+long JK should keep inactive connections in the cache before cleaning them up and 
+closing them. Note that this property will have no affect with the default cachesize 
+of 1.
 </p>
 
 <p>
-You should know that under heavy load some WebServers, for example Apache's create 
many childs/threads
-to handle the load and they destroy the childs/threads only when the load decrease.
+In a multithreaded web server scenario an AJP13 worker will use the cache to manage 
+connection load to Tomcat. As load increases the web server will create threads to 
+handle the load, and the AJP13 worker will create, cache and reuse connections to 
+Tomcat as required, up to <b>cachesize</b>. As load decreases the web server is 
+responsible for reaping extra threads, and the worker will clean out connections to 
+Tomcat per the <b>cache_timeout</b> property. Note this clean up occurs only when new 
+activity resumes following idle time. There is no reaper thread.
 </p>
 
-<p> 
-Each child could open an ajp13 connection if it have to forward a request to Tomcat, 
creating
-a new ajp13 thread on Tomcat side.
+<p>
+Tomcat creates a new thread to handle each connection. By recovering unused 
+connections from the cache, threads on Tomcat that are servicing idle connections 
+will be recovered as well.
 </p>
 
-<p>
-The problem is that after an ajp13 connection is created, the child won't drop it
-until killed. And since the webserver will keep its childs/threads running
-to handle high-load, even it the child/thread handle only static contents, you could
-finish having many unused ajp13 threads on the Tomcat side.
+<p> 
+In a forking model scenario, the web server will create new processes to handle load. 
+Each process will have it's own cache. Each cache will probably not extend beyond one 
+connection. The benefit of the cache in this scenario is marginal. Connections that 
+exist to Tomcat will be cleaned only when inactive child processes are cleaned by the 
+web server.
 </p>
 
 <p>
-<b>socket_keepalive</b> property should be used when you have a firewall between your 
webserver
-and the Tomcat engine, who tend to drop inactive connections. This flag will told 
Operating System
-to send <code>KEEP_ALIVE</code> message on inactive connections (interval depend on 
global OS settings,
-generally 120mn), and sus prevent the firewall to cut the connection.
+<b>socket_keepalive</b> property should be used when you have a firewall that drops 
+inactive connections between your webserver and Tomcat. This property will cause the 
+keep alive flag to be set on socket connections to Tomcat. The operating system will 
+then send <code>KEEP_ALIVE</code> packets on inactive connections. The keep alive 
+timeout is often a global OS setting, usually of 120 minutes. The keep alive packets 
+will prevent the firewall from cutting the connection because of no activity. Be sure 
+to adjust either the firewall or operating system so that keep alives happen inside 
+the window of firewall timeouts.
 </p>
 
 <p>
-The problem with Firewall cutting inactive connections is that sometimes, neither 
webserver or tomcat
-have informations about the cut and couldn't handle it.
+A firewall cutting inactive connections can result in either the webserver or Tomcat 
+using what appear to be valid connections. The packets will get dropped, often 
+without the other side having any awareness of the problem. Typical problems include 
+sporadic hanging issues after periods of inactivity, and accumulated idle threads and 
+stale connections on Tomcat.
 </p>
 
 <p>
-<b>socket_timeout</b> property told webserver to cut an ajp13 connection after some 
time of 
-inactivity. When choosing an endpoint for a request and the assigned socket is open, 
it will be
-closed if it was not used for the configured time.
-It's a good way to ensure that there won't too old threads living on Tomcat side, 
-with the extra cost you need to reopen the socket next time a request be forwarded.
-This property is very similar to <b>cache_timeout</b> but works also in non-cache 
mode.
+<b>socket_timeout</b> property tells the webserver to close an ajp13 connection after 
+some period of inactivity. It's a good way to guard against stale connections and 
+idle threads on the Tomcat side, with the extra cost of reopening the socket. Unlike 
+<b>cache_timeout</b> this property will apply to any existing connection between the 
+web server and Tomcat, not just N-1 connections that have been cached. In forking 
+webserver scenarios or when <b>cache_size</b> is defaulted to 1, it is probably more 
+useful and reliable than <b>cache_timeout</b>. As with <b>cache_timeout</b> there is 
+no reaper thread, and connections will only be closed on reuse following inactivity.
 </p>
 
 <screen>


--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>

Reply via email to