WenDong Zhang wrote:
I've the same problem too, and I found that if the tomcat response time is
long, you need to set connection_pool in your workers.properties.

Ok, let me be more explicit.
What you suggest above may work, /if/ the underlying reason for the problem meets certain criteria. But is is not a generic solution to what the OP indicates. We have no idea if Tomcat's response is slow or not, or if it is even requests to Tomcat that are involved. (The OP indicated that Tomcat itself was still fine, it was Apache which was not responding anymore; I don't know exactly what he meant by "Tomcat is still fine", but let's take this at face value).

If you start from the beginning (and simplifying a bit):
- the browser sends a HTTP request to Apache
- if the network is OK, and the host is not overloaded, Apache receives this request. - if Apache has a child or thread free to handle this request, it passes the request to it - if mod_jk in the child/thread determines that this request should be handled by Tomcat, it opens a connection to Tomcat to pass the request (or it re-uses an existing connection if it still has one, for efficiency). (If the request is not for Tomcat, mod_jk declines it and it is handled locally by something in Apache.) - if the Connector at the Tomcat side is not overloaded, it accepts the request, and if it still has threads to spare, it starts a thread to handle the request - the thread takes a while (short/long) to process the request and generate a response
- during that time, mod_jk waits for the response
- when the response starts arriving back from Tomcat, mod_jk starts writing it back to the pipe that is ultimately connected to the client browser. - when the response has been entirely produced by the Tomcat thread, it is done and can rejoin the pool of available threads - similarly, when mod_jk has received the entire response, it can return this connection (to Tomcat) to the pool - similarly, the Apache thread/child that was processing this request can go back to the available pool
- etc...

Now at any time during the above, a number of things can happen :
- the user may get impatient because it takes a long time for Tomcat to produce the response. So he clicks on the cancel or "refresh" icon, or clicks on another link. So when mod_jk receives a piece of the response from Tomcat and tries to forward it to the client, it finds a closed socket, and it prints a warning. - the request may not be handled by Tomcat, but instead by a buggy application in Apache itself, which gradually paralises Apache. - between the browser and the server, there is some equipment that decides that nothing has happened on this connection for a long time, and closes it down. The browser gets an error, and so does mod_jk when it tries to write to the client. - mod_jk tries to connect to Tomcat, and gets refused because the Tomcat connector has no more "queued-up connection slots" available on that port. - Tomcat accepts the connection and puts it in the queued-up connections, waiting for an available thread to process the request. But other previous requests take a long time to process, so after 2-3 minutes, the browser decides that the server is not responding, closes the connection and displays an error page to the user. And mod_jk finds a closed client socket when ultimately it wants to send the Tomcat response to the client. - there are genuine network problems between the client and the server, causing connections to drop - the sysadmin has played around with the setup of Apache and mod_jk and the JVM and Tomcat to the point that Apache accepts 10,000 requests per second, but the backend Tomcat can only handle 100 at any one time. - there is a bug in a webapp that causes it to leak resources over time, gradually slowing down Tomcat

And so on...
The point is, there are many situations that are possible, and there is not one magic fix for them all. You have to know what exactly is the problem (or at least have a clue), before you start modifying parameters left and right blindly, and possibly making the situation even worse.



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

Reply via email to