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默认文件打开数为