Hi .
We have a strange problem with out Tomcat server. Sometime (and really just sometimes) Tomcat opens a lot of threads until the maximum number of Tomcat worker processes is reached and the users cannot do anything. We have made a Java Stack Dump to get a clue, what is going on in the threads. After a short analyse of several stack dumps I encountered the following behaviour: When a thread has finished his request from the user it seems that he is going back to the state, where he waits for the next user request (see stack dump below). 1. java.net.SocketInputStream:socketRead0 2. java.net.SocketInputStream:read(SocketInputStream.java:129) 3. java.io.BufferedInputStream:fill(BufferedInputStream.java:183) 4. java.io.BufferedInputStream:read1(BufferedInputStream.java:222) 5. java.io.BufferedInputStream:read(BufferedInputStream.java:277) 6. locked-->java.io.BufferedInputStream(0x5773e070) 7. org.apache.jk.common.ChannelSocket:read(ChannelSocket.java:598) 8. org.apache.jk.common.ChannelSocket:receive(ChannelSocket.java:535) 9. org.apache.jk.common.ChannelSocket:processConnection(ChannelSocket.java: 663) 10. org.apache.jk.common.SocketConnection:runIt(ChannelSocket.java:866) 11. org.apache.tomcat.util.threads.ThreadPool$ControlRunnable:run(ThreadPool .java:683) 12. java.lang.Thread:run(Thread.java:534) Question: What does this "locked" mean? Is this thread really locked or is he just waiting for something? If he is locked, why? The thread remains there e very long time, although we are sure, that there are some user request's waiting to process at the server. After some time the thread comes to another state, which seems to me like a clean up from the Tomcat server (see stack dump below) 1. java.lang.Object:wait 2. waiting on-->org.apache.tomcat.util.threads.ThreadPool$ControlRunnable(0x52a4d94 0) 3. java.lang.Object:wait(Object.java:429) 4. org.apache.tomcat.util.threads.ThreadPool$ControlRunnable:run(ThreadPool .java:655) 5. locked-->org.apache.tomcat.util.threads.ThreadPool$ControlRunnable(0x52a 4d940) 6. java.lang.Thread:run(Thread.java:534) We have configured our Tomcat to remove worker threads after 60 seconds idle time. Question: Is this correct? We use an Apache server and use a mod_jk 2 / AJP module do forward the user requests to the Tomcat server and returning the response (configuration in the server.xml listed below). <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --> <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8017" minProcessors="5" maxProcessors="100" enableLookups="false" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="60000" useURIValidationHack="false" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/> Question: Could it be that the Apache or Tomcat doesn't clean up the connections between them so that they cannot reuse a connection? Does anyone have encountered a similar problem? How can I solve this problem? We use: Apache 2 Jakarta Tomcat 4.1.31 j2sdk 1.4.2_06 Suse Linux Enterprise Server 8 Thanks for any help, kind regards DI(FH) Thomas Konrath unycom IT Services GmbH Solutions