users@glassfish.java.net

PWC5750: All threads (200) are currently busy, waiting.

From: <glassfish_at_javadesktop.org>
Date: Tue, 24 Jun 2008 01:16:12 PDT

I'm running Glassfish v2ur2 on Java 1.6.0_06 (amd64) and RHEL 5.1 with the AJP connector enabled. After some time the AJP connector stops responding. In the server.log I can see the following message:

[#|2008-06-22T23:01:28.646+0200|SEVERE|sun-appserver9.1|org.apache.tomcat.util.threads.ThreadPool|_ThreadID=48;_ThreadName=TP-Processor4;_RequestID=06ca9d8f-f987-4ab3-8a3e-038
5aaf919fc;|PWC5750: All threads (200) are currently busy, waiting. Increase http-listener attribute acceptor-threads (200) or check the servlet status|#]

Initially I thought there was some kind of deadlock in my code. After generating a thread dump and examining the jvm.log file I got this:

&quot;TP-Processor200&quot; daemon prio=10 tid=0x00002aab0d943000 nid=0x4c63 runnable [0x0000000042cc5000..0x0000000042cc5a10]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        - locked &lt;0x00002aaae5e16918&gt; (a java.io.BufferedInputStream)
        at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:626)
        at org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:564)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:691)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)
        at java.lang.Thread.run(Thread.java:619)

&quot;TP-Processor199&quot; daemon prio=10 tid=0x00002aab0d8dc400 nid=0x4c62 runnable [0x0000000042ca4000..0x0000000042ca4d90]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        - locked &lt;0x00002aaae5e2ffa8&gt; (a java.io.BufferedInputStream)
        at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:626)
        at org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:564)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:691)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)
        at java.lang.Thread.run(Thread.java:619)

and so on. All 200 TP-Processor threads have the same stack trace and are blocking reading a socket. I presume this is the socket used for AJP communication, so I don't understand why those threads were not considered "free" and could not be used for handling requests.

Any hints?
[Message sent by forum member 'lbschenkel' (lbschenkel)]

http://forums.java.net/jive/thread.jspa?messageID=282167