4

我在 JBoss 上运行的 servlet 出现间歇性问题,Apache 通过 mod_proxy_ajp.so 转发所有请求。

有时,对于 REST 请求,我从 Apache 收到 503 错误。发生这种情况时,Apache error_log 中有以下内容:

[Mon Oct 12 09:10:19 2009] [error] (32)Broken pipe: ajp_ilink_send(): send failed
[Mon Oct 12 09:10:19 2009] [error] (32)Broken pipe: proxy: send failed to 127.0.0.1:8009 (localhost)

经过几次失败的尝试后,它又开始工作了。

我用谷歌搜索了一些,发现我不是唯一遇到这个问题的人。我找到的唯一解决方案是确保在 JBoss 之后启动 Apache(我在重新启动 JBoss 后重新启动 Apache)。

这个问题的奇怪之处在于这个 JBoss 中运行了其他 servlet,而我在那里没有问题。

servlet 基于 CXF JAX-RS。

阿帕奇是 2.2.6。

4

3 回答 3

1

使用 AJP 协议时,您必须非常小心,确保通信的双方(即 Apache 和 Tomcat)都配置了相同的参数。这是因为 AJP 使用持久的、有状态的连接,并且双方需要对连接生命周期有相同的期望。

我建议好好阅读相关的 Tomcat 文档。您可能必须修改 Apache 的mod_proxy_ajp配置,或 Tomcat 的 AJP 连接器配置,或同时修改两者,以使它们匹配。如果配置稍有不同,AJP 的性能绝对会差强人意。

于 2009-10-20T13:58:51.503 回答
1

我发现这个配置生成器在配置 AJP 连接时很有帮助。从生成的配置开始并阅读相关文档是有启发性的。

(您可以通过执行来确定“Apache mpm”参数apachectl -l,其中列出了已编译的模块。)

于 2009-11-04T15:55:09.287 回答
1

我也遇到过同样的问题,但也没有找到原因。如果轻微的性能损失是可以接受的,一个简单的解决方案是转储mod_proxy_ajp支持. mod_proxy_http至少对于每秒最多 ~100 个页面加载的网站来说,它没有问题。

于 2009-10-25T08:02:26.310 回答