首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

公司管理控制台忽然不能访问事故原因-CP30 APPARENT DEADLOCK!

2013-03-06 
公司管理控制台突然不能访问事故原因--CP30 APPARENT DEADLOCK!!!前段时间碰到个C3P0的问题,写出来跟大家

公司管理控制台突然不能访问事故原因--CP30 APPARENT DEADLOCK!!!
    前段时间碰到个C3P0的问题,写出来跟大家分享下。
    公司运营管理控制台突然无法访问,过一小段时间可以访问,一会再次不能访问!!!
    外网访问正常,数据中心的生产机不能连接上,暂时认为是网络问题导致的;
    电话给数据中心,让其查明问题原因,是否机器坏了。
    登录到另外一台收单生产机(负载均衡用的),能够访问,这台网络没有问题,收单正常,日志正常。查看数据库主机,查看活跃的sessoin数量下降不少,想必是另外一台(就是刚说的不能访问的一台)应用程序停掉了...
    隔了20分钟,数据中心打来电话,网络恢复了!
    再次登录控制台,能够访问了,查看订单处理中情况,发现从早上10点40网络的订单一直是申请中(从另外一台没有出错的机器上收取的订单,出错主机负责处理订单)但是没有处理,说明刚才出问题的机器应用程序没有自动恢复;
    立即登录到出问题的机器上,查看应用程序日志,目测都是报连接池APPARENT DEADLOCK!!!定位到最初出问题时间的异常: Failed to obtain DB connection from data source '*****DS': java.sql.SQLException: Io  684976 异常: The Network Adapter could not establish the connection
    知道了问题的原因,重启核心应用程序(注意:这个时候没有重启运营管理控制台,运营管理控制台在网络恢复后自动恢复了),订单数量立即下降到正常水平,本想问题解决了....就在这个时候代理商打电话来说代理商管理控制平台不能访问;
    奇怪的是,管理控制台能自动恢复访问,代理商控制台为什么不能呢,在同一个web容器中,底层配置也一样,为什么一个jdbc连接异常,一个良好。。。
    分析:主要原因为网络异常,导致数据库连接池失效;当spring文件中配置了<property name="breakAfterAcquireFailure" value="true"/>,在网络没有恢复的情况下有再次尝试连接数据库时,会将该数据源申明已断开并永久关闭。
    由于管理控制台就是公司内部业务人员使用,在出问题之前连接池中已经有不少空闲连接了,还未收回,如果是上面配置的话每尝试一次关一个连接,得尝试很多次,结果在恢复网络之前没有完全关闭掉,所以当网络恢复后,又可以使用了;但是代理商平台使用的是客户,客户比较多,很快连接池就全部被关闭了,导致即时网络恢复后也不能访问,需要重新启动;后来将配置改成<property name="breakAfterAcquireFailure" value="false"/>
    为了避免上述事故的发生,最好数据中能在第一时间监控到,并恢复网络链接;但是必须考虑使应用程序有一定的自动恢复访问数据源的能力,当网络恢复时,系统能自动恢复,不需要人工重启系统最好了;
    数据库监听没启动、密码或用户名输入错误、网络问题,都会导致APPARENT DEADLOCK!!!异常发生,先排除这些情况再判断是否为C3P0的Bug导致;

热点排行