weblogic和apache桥接之后,访问量大的时候,遇到了weblogic报下面的错误:
####<2006-5-30 ÏÂÎç12ʱ38·Ö19Ãë CST> <
rnel>> <>
####<2006-5-30 ÏÂÎç12ʱ38·Ö19Ãë CST> <
Kernel>> <>
oo many open files>
####<2006-5-30 ÏÂÎç12ʱ38·Ö20Ãë CST> <
rnel>> <>
####<2006-5-30 ÏÂÎç12ʱ38·Ö20Ãë CST> <
Kernel>> <>
oo many open files>

weblogic产生这个错误以后,就会拒绝服务,这时通过IE已经访问不了了。所以接下来就会出现apache报下面的错误:
[Tue May 30 13:00:57 2006] [error] CONNECTION_REFUSED [os error=0, line 1600 of ../nsapi/URL.cpp]: 218.206.70.193:7001 errno= 0

这时访问apache会提示和weblogic的桥出了问题。
这个问题已经遇到很多次了,但通常都是夜间,第二天查看日志的时候,会发现那个时候确实访问量比较大。查看当时的连接情况可以看到,apache和java连接都700多。看了网上的说明,调整了系统参数、调整了weblogic的设置等,都不见效。
http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html
http://e-docs.bea.com/wls/docs81/perform/index.html
今天又出现这个情况了,不过是白天,和web应用的作者一起对weblogic的情况进行了观察。
通过weblogic控制台,可以看到Throughput这里大都是在处理1左右的访问,Queue Length这里却在不停的涨,开始就对Thread count做了修改,从50调整到了400,但是还是可以看到Thread会用完,一会Queue Length就又涨起来了。
分析一下就可以知道,情况应该是Queue的线程对访问的处理速度太慢,导致需要处理的队列越来越多。需要处理队列的增长速度比队列的处理速度慢,这样不管有多少线程,肯定最后都会导致不够用。
现在大家就开始考虑问题是不是出在应用这里了,应用执行速度慢,weblogic线程就会一直占着,就会导致线程用尽。而实际上确实是应用这里的问题。
应用对访问的处理速度很快,有访问进来就先放到队列,而队列的处理速度却是500ms处理一下,这样一秒也就处理2个。这样问题的原因就很明确了,1s内外部访问应用可能有10来次,而应用才处理2个,所以自然会将线程占满了。
调整队列处理速度之后问题就解决了,空闲线程一直是400。