【发布时间】:2014-10-28 09:21:51
【问题描述】:
我有两个使用 mod_jk 运行的 apache 负载平衡代理服务器(名为 A1、A2)和两个 Jboss Web 服务器(名为 J1、J2)。
Jboss 版本是 jboss-eap-5.1。 Apache 版本是 2.2.15。 操作系统:Red Hat Enterprise Linux Server 6.4 版(圣地亚哥) A1 和 A2 都将请求(端口 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
【问题讨论】:
标签: multithreading apache jboss5.x ajp