一次政府部门OA系统webloigc中间件BEA-000802引发出来的BUG

一、问题描述

2015/06/05 08:27左右开始,政府部门OA系统出现无法正常访问现象。经重启weblogic服务后系统恢复正常。
二、系统环境

操作系统:   redhat5.8
JDK版本:jdk1.5.0_22

Db版本: oracle 11g

中间件版本:WebLogic Server 9.2.2.0

集群:是

三、问题处理过程

3.1 处理过程

由于当时正是上班期间,而且应用系统已经不能访问,为了让系统能够正常使用,重启了服务系统恢复正常。

我们通过分析日志文件exoa02.log00261,发现故障时间是2015-06-05 08:27到2015-06-05 08:45 抛出量现BEA-000802错,最后导致exoa02和exoa01的服务不可用。

1、查看exoa02日志,大量报错日志如下

####<2015-6-5 上午08时27分30秒 CST> <[ACTIVE] ExecuteThread: '22' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1433464050489>

 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0.

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

     at java.util.ArrayList.RangeCheck(ArrayList.java:546)

     at java.util.ArrayList.get(ArrayList.java:321)

     at weblogic.rmi.cluster.BasicReplicaList.getPrimary(BasicReplicaList.java:91)

     at weblogic.rmi.cluster.ClusterableRemoteRef.getPrimaryRef(ClusterableRemoteRef.java:146)

     at weblogic.rmi.cluster.ClusterableRemoteRef.remove(ClusterableRemoteRef.java:475)

     at weblogic.rmi.cluster.ClusterableRemoteObject.onUnbind(ClusterableRemoteObject.java:264)

     at weblogic.jndi.internal.BasicNamingNode.unbindHere(BasicNamingNode.java:591)

     at weblogic.jndi.internal.ServerNamingNode.unbindHere(ServerNamingNode.java:306)

     at weblogic.jndi.internal.BasicNamingNode.unbind(BasicNamingNode.java:561)

     at weblogic.jndi.internal.WLEventContextImpl.unbind(WLEventContextImpl.java:201)

     at weblogic.cluster.BasicServiceOffer.retract(BasicServiceOffer.java:105)

     at weblogic.cluster.NodeInfo.retract(NodeInfo.java:200)

     at weblogic.cluster.TreeManager.retract(TreeManager.java:68)

     at weblogic.cluster.MemberServices.retractAllOffers(MemberServices.java:41)

     at weblogic.cluster.RemoteMemberInfo.shutdown(RemoteMemberInfo.java:141)

     at weblogic.cluster.MemberManager.checkTimeouts(MemberManager.java:386)

     at weblogic.cluster.MulticastManager.timerExpired(MulticastManager.java:695)

     at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:265)

     at weblogic.work.ServerWorkManagerImpl$WorkAdapterImpl.run(ServerWorkManagerImpl.java:518)

     at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)

     at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

……………………………

####<2015-6-5 上午08时45分36秒 CST> <[ACTIVE] ExecuteThread: '24' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1433465136060>

####<2015-6-5 上午08时45分42秒 CST> <[ACTIVE] ExecuteThread: '24' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1433465142344>

2、从日志文件AdminServer.log和oaserver.log中可以找到托管的服务器将从服务器断开连接,然后重新连接每5分钟进行一次断连和重连接。

####<2015-6-5 上午09时46分57秒 CST> <[ACTIVE] ExecuteThread: '195' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1433468817733>

 java.io.IOException: The connection manager to ConnectionManager for: 'weblogic.rjvm.RJVMImpl@36b4f5a - id: '3722662084176194844S:172.29.1.226:[-1,7001,-1,-1,-1,-1,-1]:exoadomain:AdminServer' connect time: 'Fri Jun 05 09:41:55 CST 2015'' has already been shut down.

java.io.IOException: The connection manager to ConnectionManager for: 'weblogic.rjvm.RJVMImpl@36b4f5a - id: '3722662084176194844S:172.29.1.226:[-1,7001,-1,-1,-1,-1,-1]:exoadomain:AdminServer' connect time: 'Fri Jun 05 09:41:55 CST 2015'' has already been shut down

     at weblogic.rjvm.ConnectionManager.getOutputStream(ConnectionManager.java:1692)

     at weblogic.rjvm.ConnectionManager.createHeartbeatMsg(ConnectionManager.java:1635)

     at weblogic.rjvm.ConnectionManager.sendHeartbeatMsg(ConnectionManager.java:611)

     at weblogic.rjvm.RJVMImpl$HeartbeatChecker.timerExpired(RJVMImpl.java:1540)

     at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:265)

     at weblogic.work.ServerWorkManagerImpl$WorkAdapterImpl.run(ServerWorkManagerImpl.java:518)

     at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)

     at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

>

####<2015-6-5 上午09时47分07秒 CST> <[ACTIVE] ExecuteThread: '196' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1433468827754>

####< 2015-6-5 上午09时47分07秒 CST> <[ACTIVE] ExecuteThread: '195' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1433468827757>

####< 2015-6-5 上午09时52分07秒 CST> <[ACTIVE] ExecuteThread: '191' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1433469127759>

3、检查配置文件config.xml发现集群地址配置有误,发现还是迁移前的地址。

3.2 问题原因

1 、发生在全局事务协议的数据源是emulatetwophasecommit,日志中频繁会产生错误

2、问题是由于服务器没有指定监听的地址造成的。这将在一个多宿主的情况下造成的问题。 检查配置文件每个实例的监听地址都是空白的,请指定一个正确的监听地址。

3、配置文件config.xml集群地址配置有误。

3.3 故障优化建议

1、 Bug 11796397。目前9.2.2版本没有出这个补丁,建议将weblogic版本升级到高版本。

2、修改config.xml配置文件,将exoa01,exoa02,oaserver三个实例部分的,标签指定主机地址为:172.29.1.226,保存config.xml配置文件,重启weblogic服务。

3、修改config.xml配置文件中的cluste-address的集群地址修改成正确的地址,192.168.200.61:8001,192.168.200.61:8002

请将192.168.200.61替换成172.29.1.226。保存配置文件,重启weblogic服务。

4、堆内存溢出heapdump文件自动生成,请在启动参数中JAVA_OPTIONS加入:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\youpath\log 




请使用浏览器的分享功能分享到微信等