2009-10-15 29 views
4

我有間歇性問題與運行在JBoss上一個servlet,與Apache轉發它通過所有請求mod_proxy_ajp.so。的原因是什麼,以及如何解決503錯誤,這個在Apache中的error_log:「破管:ajp_ilink_send():發送失敗」

有時,對於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。

+0

'破碎的管:發送failed'消息一般意味着連接由另一側封閉。 JBoss日誌中是否有異常?也許有些東西在DEBUG或TRACE級別上記錄,這可能提供一些提示。 – pra 2009-10-20 13:52:50

+0

在JBoss日誌中根本沒有例外,儘管我會打開DEBUG級別來查看是否可以更好地理解可能導致此問題的原因。 – 2009-10-21 17:54:20

回答

1

當使用AJP協議,你必須非常小心,以確保通信(即Apache和Tomcat)的兩側都使用相同的參數配置。這是因爲AJP使用持久的有狀態連接,並且雙方都需要對連接生命週期有相同的期望。我建議給予relevant Tomcat docs a good read。您可能必須修改Apache的mod_proxy_ajp配置或Tomcat的AJP連接器配置,或兩者都匹配。如果配置稍有不同,AJP的性能可能會非常糟糕。

+0

我做的第一件事是檢查mod_proxy_ajp的配置和文檔。我還嘗試瞭解是否可以通過阻止連接的重用來改進。沒有改進。 – 2009-10-21 14:04:09

+0

有關您阻止重新使用連接的步驟的更多詳細信息可能會有所幫助。 – 2009-11-04 15:57:05

1

我也經歷過同樣的問題,但還沒有找到原因。一個簡單的解決方案是傾銷mod_proxy_ajp有利於mod_proxy_http,如果輕微的性能損失是可以接受的。至少對於每秒最多可達100頁的網頁,毫無問題地工作。

+0

我想修復現有的配置。 – 2009-10-25 17:28:11

+1

當然,但如果這不起作用,那麼至少有一個選項:) – 2009-10-25 18:17:28

+1

我剛試過這個,它確實有效。 503的處理正確,並且透明地傳遞給另一個節點....我還需要在配置中添加「ProxyErrorOverride On」,並按照建議將我的ajp://鏈接更改爲http://鏈接。 – 2013-03-20 15:29:42

1

我發現this config generator在配置AJP連接時很有用。從生成的配置文件開始,閱讀相關文檔很有啓發性。

(可以通過執行apachectl -l,其中列出了編譯的模塊確定的「阿帕奇MPM」參數。)

+0

這是一個很酷的發生器,但我沒有任何負載平衡。只是一個直接的連接。 – 2009-11-05 13:52:29

相關問題