【问题标题】:What is the cause and how to fix 503 errors with this in Apache error_log: "Broken pipe: ajp_ilink_send(): send failed"原因是什么以及如何在 Apache error_log 中修复 503 错误:“Broken pipe: ajp_ilink_send(): send failed”
【发布时间】:2010-12-06 23:53:59
【问题描述】:

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

Apache 是 2.2.6。

【问题讨论】:

  • Broken pipe: send failed 消息一般表示连接被对方​​关闭。您的 JBoss 日志中是否同时有任何异常?也许在 DEBUG 或 TRACE 级别记录了一些可以提供提示的内容。
  • JBoss 日志中根本没有异常,不过我会打开 DEBUG 级别,看看是否能更好地了解可能导致这种情况的原因。

标签: jboss cxf ajp


【解决方案1】:

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

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

【讨论】:

  • 这是一个很酷的生成器,但我没有任何负载平衡。只是直接连接。
【解决方案2】:

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

【讨论】:

  • 我想修复现有配置。
  • 当然可以,但如果这不起作用,那么至少还有一个选择:)
  • 我刚试过这个,它确实有效。 503 现在已正确处理,并透明地传递给另一个节点......我还需要在我的配置中添加“ProxyErrorOverride On”,并按照建议将我的 ajp:// 链接更改为 http:// 链接。
【解决方案3】:

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

我建议给relevant Tomcat docs a good read。您可能必须修改 Apache 的 mod_proxy_ajp 配置或 Tomcat 的 AJP 连接器配置,或两者都修改,以便它们匹配。如果配置稍有不同,AJP 的性能绝对会差强人意。

【讨论】:

  • 我做的第一件事是查看 mod_proxy_ajp 的配置和文档。我还进行了实验,看看是否可以通过防止重复使用连接来改进事情。没有改进。
  • 有关您为“防止重复使用连接”而采取的步骤的更多详细信息可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多