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:
"TP-Processor200" 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 <0x00002aaae5e16918> (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)
"TP-Processor199" 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 <0x00002aaae5e2ffa8> (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