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

Reply via email to