weblogic92衔接池的衔接数非常问题[Java编程]
本文“weblogic92衔接池的衔接数非常问题[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
有客户说,他们通过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,
以上是“weblogic92衔接池的衔接数非常问题[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |