weblogic的一次问题处理
在程序开发后期,小机数据库配置完成之后,配置grid数据源,在应用服务器上搭建环境,进行最后的模拟,问题出现;
问题现象:
应用登录系统之后,添加用户时进度条一直在刷新,无法成功;强行关闭后,无法登陆。
问题分析:
首先在运行此操作时,检查应用的前后台日志:后台报超时。
然后检查数据库信息,数据库中存在大量的锁等待,说明数据库中已经写入数据,但是无法提交,经测试发现,与数据库中最简单的锁状态基本一致;
登录EM,监控数据库,效果一样,于是就认为是锁的原因。但是在测试环境上没有出现这样的问题,与生产环境相比,变化的地方是:weblogic数据源的配置,数据库的配置和网络的配置;
进行各个排除:
首先,网络配置。在生产环境的防火墙上配置了一个默认的180s断开不活动的session,一度认为是找到了问题的原因,但是经过与网络人员联系,这是默认的,每套环境上都有这样的策略,于是排除,其实网络环境是没有变的,是我们认为变了;同时,在从登录系统到创建用户根本不需要180s的时间,从通道的建立到错误重现,还没有受到网络策略的限制。
但此时,已经形成了比较清晰的思路,是在应用连接上数据库之后连接建立,在运行期间突然由于某种原因,使这个session断掉;
其次,检查weblogic的配置。由于在配置weblogic的时候,有测试按钮,当时是成功,所以怀疑的不太多,认为配置是没有问题的。
最后,再次检查数据库,确定在此操作时数据库是否有数据写入,还是没有写入之前就已经断掉了连接。
如何定位数据库的数据写入:
从现象看,数据已经进来了,但是挂起了,第一次就挂起,排除锁的关系!为什么第一次数据insert 就会挂起???
1)、杀掉数据库中所有的lock session
2)、重启应用,重现场景
3)、检查数据库session状态,session再次挂起
4)、准备在程序中写入测试表,测试连接通道的有效性,若此通道无效则直接报错,若有效则进行交易
5)、与中间件工程师交流后,发现在weblogic的数据源中就存在些测试表的地方(创建测试表同时配置连接池)
6)、配置后,间隔180s进行再次交易,成功(彻底排除网络原因),等待10min、30min再次操作,成功。
7)、问题再也没有重现,障碍解决
在程序开发后期,小机数据库配置完成之后,配置grid数据源,在应用服务器上搭建环境,进行最后的模拟,问题出现;
问题现象:
应用登录系统之后,添加用户时进度条一直在刷新,无法成功;强行关闭后,无法登陆。
问题分析:
首先在运行此操作时,检查应用的前后台日志:后台报超时。
然后检查数据库信息,数据库中存在大量的锁等待,说明数据库中已经写入数据,但是无法提交,经测试发现,与数据库中最简单的锁状态基本一致;
登录EM,监控数据库,效果一样,于是就认为是锁的原因。但是在测试环境上没有出现这样的问题,与生产环境相比,变化的地方是:weblogic数据源的配置,数据库的配置和网络的配置;
进行各个排除:
首先,网络配置。在生产环境的防火墙上配置了一个默认的180s断开不活动的session,一度认为是找到了问题的原因,但是经过与网络人员联系,这是默认的,每套环境上都有这样的策略,于是排除,其实网络环境是没有变的,是我们认为变了;同时,在从登录系统到创建用户根本不需要180s的时间,从通道的建立到错误重现,还没有受到网络策略的限制。
但此时,已经形成了比较清晰的思路,是在应用连接上数据库之后连接建立,在运行期间突然由于某种原因,使这个session断掉;
其次,检查weblogic的配置。由于在配置weblogic的时候,有测试按钮,当时是成功,所以怀疑的不太多,认为配置是没有问题的。
最后,再次检查数据库,确定在此操作时数据库是否有数据写入,还是没有写入之前就已经断掉了连接。
如何定位数据库的数据写入:
从现象看,数据已经进来了,但是挂起了,第一次就挂起,排除锁的关系!为什么第一次数据insert 就会挂起???
1)、杀掉数据库中所有的lock session
2)、重启应用,重现场景
3)、检查数据库session状态,session再次挂起
4)、准备在程序中写入测试表,测试连接通道的有效性,若此通道无效则直接报错,若有效则进行交易
5)、与中间件工程师交流后,发现在weblogic的数据源中就存在些测试表的地方(创建测试表同时配置连接池)
6)、配置后,间隔180s进行再次交易,成功(彻底排除网络原因),等待10min、30min再次操作,成功。
7)、问题再也没有重现,障碍解决