我有一个与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这个问题?
我正在使用这些版本:
谢谢
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议的,这可以通过几个步骤来解决: