是什么原因以及如何在Apache error_log中修复503错误:“Broken pipe:ajp_ilink_send():send failed”

时间:2009-10-15 10:55:41

标签: jboss cxf ajp

我在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)

尝试失败后,再次开始工作。

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

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

servlet是基于CXF JAX-RS的。

Apache是​​2.2.6。

3 个答案:

答案 0 :(得分:1)

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

我建议给relevant Tomcat docs a good read。您可能必须修改Apache的mod_proxy_ajp配置或Tomcat的AJP连接器配置,或两者都修改,以便它们匹配。如果配置甚至略有不同,AJP的表现绝对很糟糕。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我发现this config generator在配置AJP连接时很有帮助。从生成的配置开始并阅读相关文档是有益的。

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