JBoss 5.0.1 AJP рабочий поток зависает?
Недавно у нас возникла проблема с нашей JBoss AS, и мы не смогли определить основную причину.
у нас есть сервер балансировки нагрузки apache, расположенный напротив наших серверов jboss, который доставляет запросы к jboss по протоколу AJP через порт 8009.
недавно мы столкнулись с проблемой, когда рабочие потоки застряли в системе (мы видим это через jmx-console на jboss.web, а также при выдаче дампов потоков).
В настоящее время у нас есть 700 maxThreads для AJP-соединений, и для достижения максимального значения требуется до 3 дней. в этот момент мы перезапускаем службу jboss для ее решения.
Эти потоки выглядят так в дампе потоков:
**Thread: ajp-0.0.0.0-8009-4 : priority:5, demon:true, threadId:90, threadState:RUNNABLE**
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:1036)
org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:1115)
org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:383)
org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:384)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:662)
**Thread: ajp-0.0.0.0-8009-5 : priority:5, demon:true, threadId:91, threadState:RUNNABLE**
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:1036)
org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:1115)
org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:383)
org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:384)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:662)
**Thread: ajp-0.0.0.0-8009-6 : priority:5, demon:true, threadId:92, threadState:RUNNABLE**
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:1036)
org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:1115)
org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:383)
org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:384)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:662)
**Thread: ajp-0.0.0.0-8009-7 : priority:5, demon:true, threadId:93, threadState:WAITING**
- waiting on <0x42ee5ce8> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:485)
org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:416)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:442)
java.lang.Thread.run(Thread.java:662)
так далее...
Веб-приложение, работающее на jboss, использует реализацию Jersey, чтобы либо вернуть клиенту список доступных файлов, либо сами файлы, используя application / octet-stream (добавление InputStream в качестве сущности в ответ на Джерси).
Спасибо заранее, Мени