apache 桥接错误

网络整理 - 07-26

统错误提示如下:

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控制台,可以看到hread count做了修改,从50调整到了400,但是还是可以看到Thread会用完,一会Queue Length就又涨起来了。

分析一下就可以知道,情况应该是Queue的线程对访问的处理速度太慢,导致需要处理的队列越来越多。需要处理队列的增长速度比队列的处理速度慢,这样不管有多少线程,肯定最后都会导致不够用。

现在大家就开始考虑问题是不是出在应用这里了,应用执行速度慢,weblogic线程就会一直占着,就会导致线程用尽。而实际上确实是应用这里的问题。

应用对访问的处理速度很快,有访问进来就先放到队列,而队列的处理速度却是500ms处理一下,这样一秒也就处理2个。这样问题的原因就很明确了,1s内外部访问应用可能有10来次,而应用才处理2个,所以自然会将线程占满了。

调整队列处理速度之后问题就解决了,空闲线程一直是400。