WebLogic9.2拒绝访问的错误分析及解决方案

WebLogic9.2拒绝访问的异常分析及解决方案

 

问题描述

2011年8月13日上午10点46分,系统访问异常,页面显示:

Connection rejected, the server is in the RUNNING state. Starting service weblogic.application.internal.BackgroundDeploymentService$WaitForBackgroundCompletion, 110 of 112. Last service weblogic.deploy.service.internal.adminserver.HeartbeatService took 2ms.

同时,WebLogic控制台也无法访问,页面显示同上。

按正常流程停止WebLogic服务不能成功,使用kill命令强制停止WebLogic服务后使用正常流程启动WebLogic服务。

上午11点38分系统启动完毕,恢复正常使用。

系统日志如下:

####<2011-8-13 上午10时46分15秒 CST> <Critical> <Server> <tfh-node2> <TFHWEB> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1313203575118> <BEA-002616> <Failed to listen on channel "Default" on 132.60.5.29:8080, failure count: 2, failing for 1 seconds, java.net.SocketException: 无效的自变量> 

####<2011-8-13 上午10时46分59秒 CST> <Critical> <Server> <tfh-node2> <TFHWEB> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1313203619270> <BEA-002617> <Attempting to close and reopen the server socket on on channel "Default" on 132.60.5.29:8080.> 

####<2011-8-13 上午10时47分09秒 CST> <Notice> <Server> <tfh-node2> <TFHWEB> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1313203629287> <BEA-002614> <Reopening channel "Default" on 132.60.5.29:8080.> 

####<2011-8-13 上午10时47分09秒 CST> <Notice> <Server> <tfh-node2> <TFHWEB> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1313203629787> <BEA-002615> <After having failed to listen, the server is now listening on channel "Default" on 132.60.5.29:8080.> 

####<2011-8-13 上午10时47分09秒 CST> <Notice> <Server> <tfh-node2> <TFHWEB> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1313203629788> <BEA-002623> <Connection rejected, the server is in the RUNNING state. Starting service weblogic.application.internal.BackgroundDeploymentService$WaitForBackgroundCompletion, 110 of 112. Last service weblogic.deploy.service.internal.adminserver.HeartbeatService took 2ms.> 

二、 异常分析

WebLogic9.2使用的是jdk1.5,任何关于半关闭socket连接的操作都会抛出 java.net.SocketException 异常。

Solaris系统对打开文件数的限制导致SocketException,致使WebLogic不能正常服务。在Solaris系统中,socket连接是以文件的形式存在的,所以socket连接受到系统对打开文件数的限制。当前,Solaris系统对程序打开文件的限制数是256,且WebLogic的日志记录方式是无限增长,随着日志文件的日益增多,WebLogic打开的文件数越来越多,当文件打开总数达到256时,系统不再允许WebLogic打开文件(包括socket连接),就出现了上面的问题。WebLogic服务器重启后,日志文件打开数量归零,故能启动正常。

三、 解决办法

1. 设置WebLogic系统日志大小及数量,并将日志记录方式改为滚动方式。步骤如下: Lock & Edit --》Environment--》Servers--》examplesServer--》 Logging --》勾上 Limit number of retained files --》 Files to retain: 数量设置为 100--》勾上 Rotate log file on startup (很重要) --》保存。

2. 设置系统打开文件限制数, 在/etc/ profile 添加 这两个参数

ulimit -n 4096

3. 设置java默认使用IPV4协议。修改/etc/profile文件,在最后添加以下内容:

JAVA_OPTS="-Djava.net.preferIPv4Stack=true" 

export  JAVA_OPTS 

4. 退出登录后,重新登录,然后重新启动WebLogic。

四、 对业务的影响

1.需要停止WebLogic服务,退出用户登录后重新登录,再启动WebLogic服务。

    注:1.有人说是IPV4有关,我不太理解原因。求解释帝。
        2.Solaris默认文件打开数为