Jboss 无法访问/使用 ajp 时速度慢于 Apache

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

我搜索了一下,但似乎找不到任何相关主题。有人说这种行为可能是由于 apache 与 jboss 配置错误造成的。apache 允许的最大连接数远远大于 jboss,导致 apache 连接超时。

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

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

我正在使用这些版本:

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

谢谢

答案1

4.2.3 jboss,您应该增加 server.xml 中允许的 ajp 连接数。如果未设置,默认值为 40,太低了。将其提高到比当前最大连接数高 20%。如果您有数百个同时连接,请将其设置为 512 并使用状态控制台进行监控。

答案2

以下是在我的环境中使 jb7.1.1 与 apache mod_jk 通过 ajp 连接协同工作的原因:

独立文件

<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 吗?

答案3

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

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

该问题导致 AJP 线程无限期地阻塞在具有 CLOSED_WAIT 状态的套接字上。当达到 AJP 连接器的“maxProcessors”限制时,jboss 将无法通过 AJP 回答任何请求,从而导致您在 apache 日志中收到错误。

根据票证中的建议,可以通过以下几个步骤解决:

  • 从以下位置签出 jbosswebhttp://anonsvn.jboss.org/repos/jbossweb/tags/JBOSSWEB_2_0_1_GA
  • 按照 jboss 问题跟踪器评论主题中的建议应用 AjpPatch.patch
  • 编辑 build.properties.default 以便 jbossweb 根据您的 jboss AS 版本构建
  • 使用 ant 构建项目,并用修补版本替换当前的 jboss-web.deployer/jbossweb

相关内容