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