Jboss无法访问/缓慢落后与ajp的Apache

我有一个与apache2的JBoss实例运行的Linux服务器。 Apache2将使用AJP连接将代理转换为JBoss。

我在apache error.log中发现了这些消息:

[error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header [error] ajp_read_header: ajp_ilink_receive failed [error] (120006)APR does not understand this error code: proxy: read response failed from 8.8.8.8:8009 (hostname) [error] (111)Connection refused: proxy: AJP: attempt to connect to 8.8.8.8:8009 (hostname) failed [error] ap_proxy_connect_backend disabling worker for (hostname) [error] proxy: AJP: failed to make connection to backend: hostname [error] proxy: AJP: disabled connection for (hostname)25 

我search了一下,但我似乎无法find任何相关的主题。 有人说,这种行为可能是由错误configuration的Apache与JBoss的。 告诉apache允许的最大连接数量远远大于jboss,导致apache连接超时。

但是我知道这个应用程序并没有被成千上万的同时连接使用,甚至没有上百个连接,所以我不认为这可能是一个原因。

有人有想法吗? 或者可以告诉我如何debugging这个问题?

我正在使用这些版本:

  • Debian 4.3.5-4 64Bit
  • Apache版本2.2.16
  • JBOSS版本4.2.3.GA

谢谢

4.2.3 jboss,你应该增加server.xml中可以允许的ajp连接的数量。 如果没有设置,默认是40,这太低了。 比目前的最大连接数量高出20%。 如果您有几百个同时连接,请将其设置为512并使用状态控制台进行监视。

这里是什么使jb7.1.1与Apache的mod_jk工作在我的环境中连接槽ajp:

standalone.xml

 <profile> ... <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false"> ... <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp"/> .... </subsystem> .... </profile> <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> ... <socket-binding name="ajp" port="8009"/> ... </socket-binding-group> 

顺便说一句8.8.8.8是不是这个谷歌DNS?

我相信你看到的行为可能是由以下jboss问题引起的:

https://issues.jboss.org/browse/JBPAPP-366

这个问题导致AJP线程无限期地在CLOSED_WAIT状态的套接字上被阻塞。 当AJP连接器的“maxProcessors”限制达到时,jboss无法通过AJP来应答任何更多的请求,从而导致你在apache日志中出现的错误。

正如门票中所build议的,这可以通过几个步骤来解决:

  • 结帐jbossweb从http://anonsvn.jboss.org/repos/jbossweb/tags/JBOSSWEB_2_0_1_GA
  • 应用jposs问题跟踪器的评论线程中build议的AjpPatch.patch
  • 编辑build.properties.default,这样jbossweb就是你的jboss AS的版本
  • 使用ant构build项目,并用修补的版本replace当前的jboss-web.deployer / jbossweb