设为首页 收藏本站
查看: 2616|回复: 0

[经验分享] weblogic错误:Pool JDBC Data Source-0 is disabled解决

[复制链接]

尚未签到

发表于 2017-2-17 07:58:47 | 显示全部楼层 |阅读模式
  weblogic错误:Pool JDBC Data Source-0 is disabled解决
中间件应用服务器 2010-08-05 19:02:38 阅读337 评论0  字号: 订阅




核心提示:有客户说,他们通过connection pool监控发现weblogic92连接池中当前连接数(current capacity)小于初始连接数(initial capacity)。从现象上来说,给客户的直觉是:连接池初始化有问题,没有帮助他们初始化他们需要的那么多连接。但他同时发现,几个connection
  有客户说,他们通过connection pool监控发现weblogic92连接池中当前连接数(current capacity)小于初始连接数(initial capacity)。从现象上来说,给客户的直觉是:连接池初始化有问题,没有帮助他们初始化他们需要的那么多连接。但他同时发现,几个connection pool中,其他pool没有问题。拿到问题,我也怀疑这可能是weblogic的一个bug,但随后从客户发送过来的日志中发现出问题的connection被disable过。调查后发现问题的确和这个pool被disable过有关,那么为什么pool被disable后,会出现这样的问题呢? 

        首先我们看看这个pool为什么会被disable? 手工强制suspend连接池、数据库关闭、网络不稳定等因素都可能成为connection pool被disable的诱因。从客户的日志中,我能看到大量的如下异常,
1:java.net.SocketException: 管道已断开 (errno:32)
2:weblogic.common.resourcepool.ResourceDisabledException: Pool JDBC Data Source-0 is disabled, cannot allocate resources to applications.
        
         根据上面的异常,首先跟客户确认是否存在过数据库关闭、强制disable connection的操作,这些都被客户否定了,那么最大可能的原因就是网络不稳定,网络是好时坏的话,很容易造成weblogic连接池中到database server的连接中断,从而导致connection pool被disable。

         那么为什么连接中断会引起connection pool被disable呢?这里要谈到两个参数:CountOfTestFailuresTillFlush、CountOfRefreshFailuresTillDisable。这两个参数在weblogic连接池实现中由于控制是否、何时flush或disable连接池,两个都是指连续几次失败操作(test、refresh)后去flush或disable connection pool。注意:这是说的是连续,而不是间断,每次成功操作(test、refresh)后,这两个值都会被reset成0。默认情况下这两个值均为2,即连续失败3(2+1)次后,connection pool会被flush或disable。两者的区别在于,flush用于清空connection pool中的所有连接(通常都是中断的connection),当pool状态仍保持在running状态,而对于后者,connection pool将会变成suspend。前者对于客户端而言,还可以从pool中reserve connection,reserve时,weblogic会尝试重现创建连接,如果创建连接成功,那么客户端就可以拿到可用的连接。而对于一个处于suspend状态,客户端reserve connection的请求会直接被拒绝,收到的异常如下:
weblogic.common.resourcepool.ResourceDisabledException: Pool JDBC Data Source-0 is disabled, cannot allocate resources to applications

        一个被disable的connection pool我们需要手工resume吗?比如数据库因为某些原因而突发关闭,数据库恢复后,我们是否需要手工去resume这个pool?不需要,weblogic内部实现了连接池的自我健康检查功能,对于disable的connection pool,weblogic会每隔5秒钟(DEFAULT_SCAN_UNIT)去做一次连接尝试(尝试创建一个物理连接,如果连接成功,那么这个连接会被直接放入连接池中,我们的问题就处在这儿),我们通过下面的复现过程来看看具体原因:

1:配置一个datasource,connection的连接数具体配置如下:


 
2:weblogic启动后,我们可以看到current capacity为15,此时connection pool刚被初始化,weblogic会根据initial capacity去创建相应数量的连接。此时如果我们关闭数据库,然后通过测试程序去获取连接,你会看到我们无法拿到连接(注意我们要选上TestOnReserve),重复三次,再次去监控connection pool。因为三次test失败后,connection pool会被disable(状态为suspend),如下:


 


 
3:重启database。由于weblogic内部实现了connection pool的自检功能,对于disabled的connection pool,weblogic每隔5秒钟去做一次连接尝试,如果连接创建成功,新建连接会被放入连接池,同时resume连接池。通过监控我们可以看到,连接池状态变成running,同时current capacity变成1,


 


 

4:启动多线程测试程序,模拟2个用户并发。第一个用户可以从connection pool中成功拿到连接,而第二个用户因为连接池的current capacity为1,无法直接从pool中拿到连接,这是连接池需要做扩展,而扩展的个数就是我们设定的capacity increment(20)。再来监控connection pool,我们就会看到连接池的current capacity为21,如下:


 

        那么我们能不能通过参数配置不让connection pool不作disable呢? 我们前面所提到的两个参数:CountOfTestFailuresTillFlush、CountOfRefreshFailuresTillDisable,可以实现这样的要求:

  • <internal-properties>  
  •           <property>  
  •            <name>CountOfTestFailuresTillFlush</name>  
  •             <value>10</value>  
  •            </property>  
  •           <property>  
  •              <name>CountOfRefreshFailuresTillDisable</name>  
  •             <value>20</value>  
  •            </property>  
  • </internal-properties>  


internal-properties用于定义一些weblogic internal的参数,这些参数无法在console上做配置。除了上面的这两个参数,我们还可以通过internal-properties配置如下几个参数:
    TestConnectionsOnCreate
    TestConnectionsOnRelease
    HighestNumUnavailable
    SecurityCacheTimeoutSeconds

         通过上述分析,我们可以看到这个问题不是weblogic的bug,而是因为网络问题导致connection pool被disable,要彻底解决这个问题,可以通过网络分析工具查出网络问题,进而解决我们看到的这种现象。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-343146-1-1.html 上篇帖子: 【转】-weblogic中影响性能的参数总结 下篇帖子: flex+blazeds在 weblogic下 请大神解决啊!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表