Monty wig wrote:
Gurus - I am working on a situation where Apache spits "Proxy Errors" while
trying to get a page form Tomcat.

We are running Apache 2.2.3 and tomcat 5.5 on the same box and using
mod_proxy to redirect traffic to tomcat on port 8080. Tomcat has
maxThreads=150 but when we look at the total # of connection on tomcat using
"netstat" we get around 80 established connection, 140 connection in
TIME_WAIT. So my question is does 150 maxThreads means total # of
connections (ESTABLISHED + WAIT_TIME) or only ESTABLISHED connections...

Any help will be appreciated...


TIME_WAIT (or TIMED_WAIT) is a normal state for the "client" in a TCP connection (the client being the side which has started the connection in the first place). It happens when the client decides to close the connection and sends a packet to that effect to the server. It then goes in the TIME_WAIT state, while waiting for the server to close its end of the connection (and say so to the client).

Normally, this state lasts only a very short time. If it persists for a long time, then it would indicate a network problem, which for a connection that is between an Apache process and a Tomcat process on the same box, is quite unlikely and bizarre. So make sure that these TIME_WAIT sockets are really between Apache+mod_proxy and Tomcat (use "netstat -pan --tcp" if you are on a Linux system e.g., it will show the process-id of the "owner" of the connection).

The "maxThreads" attribute of a Tomcat Connector, is - as the name indicates - the maximum number of Tomcat threads that this Connector will start, to process incoming requests.
So, suppose that
- Tomcat is not currently doing anything
- your Connector has maxThreads="150"
- you are sending 200 requests simultaneously to Tomcat through that Connector
then
- the Connector will start up to 150 threads, enabling it to start processing 150 of the 200 requests - the 50 remaining requests may be queued up in the TCP wait queue for this socket, waiting for a thread to become available to process them, one after the other - as soon as one Tomcat thread finishes processing its current request, it will be available to process one of the requests in the socket queue. But this depends on how long it takes to process the shortest request that was already attributed to a thread. If it takes very long for a request to be accepted and start being processed, then the client side (here Apache+mod_proxy) may give up, and return an error to the client application.

That is what you may see as a "proxy error".

You may well have set the maxThreads=150, but Tomcat may be unable to start as many threads, for example because of some resource limitation (memory ?). So requests start piling up in the socket accept queue for the Connector, without being processed. And when that queue in turn reaches its maximum capacity (see the "backlog" or "acceptCount" attribute), that socket (8080) may start rejecting new connections right away. (But I believe that this would trigger an error of the type "The server is not responding and may be busy..".)

Apart from the "netstat" utility, two other tools may help you determine what 
is going on :
- the Apache "mod_status" module (which returns a page showing what the Apache children processes are doing) - the Tomcat Manager application (which shows a server status page showing what the threads are doing)
Also mod_proxy itself may give you more details in the Apache error log.

Normally, ESTABLISHED connections between Apache and Tomcat should more or less correspond to the number of requests being actively processed, which should also correspond to one active Apache child process (or thread) having sent a request to Tomcat, and to a thread in Tomcat processing that request. But this is not a strict one-to-one relationship, because there may be connections which are still alive due to the KeepAlive factor, while real activity has stopped on the channel.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to