統錯誤提示如下:
Failure of server APACHE bridge:
--------------------------------------------------------------------------------
No backend server available for connection: timed out after 10 seconds.
--------------------------------------------------------------------------------
Build date/time: May 6 2003 15:18:12
--------------------------------------------------------------------------------
Change Number: 255426
以上問題不知道在什么條件下才出現?偶然出現
前段時間是正常的,但是這兩天內卻出現了四次
出現以上問題的時候,重啟Weblogic也不能恢復正常
只能重啟整臺服務器才可以:(
今天重新驗證了一遍!
1. 在出現這種Failure of server APACHE bridge:錯誤時,
采用 7001端口訪問 Weblogic上的服務,還是正常的!
通過 7001端口運行 jsp程序也都正常,那說明問題不在 wls上
2. 而前端的.html是可以正常瀏覽,那也能說明apache是正常的
所以說問題只會出現在Apache 跟wls的橋接上面
而橋接的代碼如下:
#WebLogic Server Proxy Settings
LoadModule weblogic_module modules/mod_wl_20.so
<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
MatchExpression *.jsp
MatchExpression *.do
</IfModule>
我想這段代碼大家已經很熟悉了,應該不會有什么問題的吧?
使用 apache -l或者apache -t也都可以查看到mod_wl_20模塊正常使用
apache的error.log,有如下代碼
[Sun Aug 01 01:54:05 2004] [warn] (OS 64)指定的網絡名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.
[Sun Aug 01 01:54:07 2004] [error] CONNECTION_REFUSED [os error=0, line 1487 of ../nsapi/URL.cpp]: 211.99.203.123:7001 errno = 0
在BEA.com的文檔中心發現了如下重要發現,以下整理出來的解決辦法,未經最后驗證。
降低Connection_Refused錯誤的解決辦法
這是出現Apache橋錯誤的重要原因(未驗證)
解決辦法如下:
1. 增加Weblogic Server中Accept Block的數值,默認值為50
BEA提示以25%的速度進行增加,直到不出現Connection_Block的錯誤提示。//這里我將其調高至200
2. 設置Apache的Httpd.conf中,KeepAlive為On
3. 減小Windows 2000中TcpTimedWaitDelay時間,默認情況下為240(未設置的情況下也是這個數值)
此項設置需要到注冊表如下位置進行設置
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters/TcpTimedWaitDelay
如果注冊表中沒有TcpTimedWaitDelay這個項目,BEA提示增加這個項目,并設置為雙字節(DWORD)類型
數值設置為30 ~ 240之間即可 //這里我將其設置為120
今天又出現這個情況了,不過是白天,和web應用的作者一起對weblogic的情況進行了觀察。
通過weblogic控制臺,可以看到Throughput這里大都是在處理1左右的訪問,Queue Length這里卻在不停的漲,開始就對Thread count做了修改,從50調整到了400,但是還是可以看到Thread會用完,一會Queue Length就又漲起來了。
分析一下就可以知道,情況應該是Queue的線程對訪問的處理速度太慢,導致需要處理的隊列越來越多。需要處理隊列的增長速度比隊列的處理速度慢,這樣不管有多少線程,肯定最后都會導致不夠用。
現在大家就開始考慮問題是不是出在應用這里了,應用執行速度慢,weblogic線程就會一直占著,就會導致線程用盡。而實際上確實是應用這里的問題。
應用對訪問的處理速度很快,有訪問進來就先放到隊列,而隊列的處理速度卻是500ms處理一下,這樣一秒也就處理2個。這樣問題的原因就很明確了,1s內外部訪問應用可能有10來次,而應用才處理2個,所以自然會將線程占滿了。
調整隊列處理速度之后問題就解決了,空閑線程一直是400。