我有两个使用mod_jk运行的apache负载平衡代理服务器(名为A1,A2)和两个Jboss Web服务器(名为J1,J2)。
Jboss版本是jboss-eap-5.1。 Apache版本是2.2.15。 操作系统:红帽企业Linux服务器版本6.4(圣地亚哥) A1和A2 colud都将请求(使用端口80)从外部重定向到J1,J2(都是端口8080)。 A1,A2的设置相同(HostIP除外)。 J1,J2也有相同的设置。(HostIP和jvmRoute除外)
我对这个架构有一些问题。 J1和J2可以很好地处理A1的请求(收到请求 - >创建要处理的线程 - >处理完成 - >关闭线程)。
但A2的要求很奇怪。当过程结束时,线程没有关闭。并且网络连接保持在ESTABLISHED。 我使用jstack PID来检查,并且有很多以下语句:
"ajp-XX.XX.72.12-8009-240" daemon prio=10 tid=0x00007f791418e800 nid=0x7793 runnable [0x00007f7875d5c000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:1036)
at org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:1115)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:383)
at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:385)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:451)
at java.lang.Thread.run(Thread.java:662)`
将上述PID(nid = 0x7793)与ps -efT |进行比较grep 30611,可以得到以下内容: `xxxx 17869 30611 17821 0 20:40? 00:00:00 / usr / local / java / bin / java -program.name = run.sh ...
虽然我使用netstat -A inet,但有很多这样的连接:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 npouiap2:8009 10.100.84.34:49666 ESTABLISHED
tcp 0 0 npouiap2:8009 10.100.84.34:50374 ESTABLISHED
tcp 0 0 npouiap2:8009 10.100.84.34:50507 ESTABLISHED
答案 0 :(得分:1)
问题可能是线程没有空闲,因为 AJP连接默认是持久的。
您可以尝试其中一个选项:
maxThreads
增加到与"max threads"
相同
(确切的指令因MPM而异)在httpd mod_jk's
disable reuse option 选项2是最简单的应用和验证问题是否仍然存在。