<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 42,comments - 83,trackbacks - 0

            有客戶說,他們通過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,可以實現這樣的要求:

     1   <internal-properties>
     2           <property>
     3             <name>CountOfTestFailuresTillFlush</name>
     4             <value>10</value>
     5           </property>
     6           <property>
     7             <name>CountOfRefreshFailuresTillDisable</name>
     8             <value>20</value>
     9           </property>
    10   </internal-properties>

    internal-properties用于定義一些weblogic internal的參數,這些參數無法在console上做配置。除了上面的這兩個參數,我們還可以通過internal-properties配置如下幾個參數:
        TestConnectionsOnCreate
        TestConnectionsOnRelease
        HighestNumUnavailable
        SecurityCacheTimeoutSeconds

             通過上述分析,我們可以看到這個問題不是weblogic的bug,而是因為網絡問題導致connection pool被disable,要徹底解決這個問題,可以通過網絡分析工具查出網絡問題,進而解決我們看到的這種現象。

    posted on 2009-08-29 23:15 走走停停又三年 閱讀(7129) 評論(3)  編輯  收藏 所屬分類: Weblogic

    FeedBack:
    # re: weblogic92連接池的連接數異常問題
    2009-09-16 00:25 | gan
    學習了,
    在集群環境下,對以下參數有什么要求:
    Initial Capacity
    Maximum Capacity
    Capacity Increment  回復  更多評論
      
    # re: weblogic92連接池的連接數異常問題
    2009-09-16 08:02 | 走走停停又三年
    @gan

    這幾個參數跟集群沒什么關系,這些值由你的應用對連接的需求決定。如果數據庫端對并發連接沒有什么限制,最后把initial和max設成一樣,這樣連接池不用在運行過程中去做擴展。
      回復  更多評論
      
    # re: weblogic92連接池的連接數異常問題
    2009-12-30 16:49 | pop
    請問這些參數在哪個配置文件下呢,菜鳥謝謝啦  回復  更多評論
      
    主站蜘蛛池模板: 2015日韩永久免费视频播放| 毛片基地看看成人免费| 国产免费不卡视频| 亚洲视频在线观看网址| 99re免费在线视频| 亚洲av中文无码乱人伦在线播放| 中文字幕免费在线看线人动作大片 | 波多野结衣免费一区视频| 精品亚洲成α人无码成α在线观看 | 国产亚洲男人的天堂在线观看| 国内自产少妇自拍区免费| 久久久久免费视频| 亚洲午夜国产片在线观看| 一个人免费观看视频在线中文| 亚洲综合另类小说色区| 国产婷婷成人久久Av免费高清| 亚洲人成网站影音先锋播放| 中文字幕视频免费| 亚洲va在线va天堂成人| 又色又污又黄无遮挡的免费视| 一区在线免费观看| 亚洲av日韩av不卡在线观看| 99爱在线精品免费观看| 亚洲av无码专区在线电影| 亚洲精品无码成人片在线观看 | 亚洲欧洲视频在线观看| 97免费人妻无码视频| 亚洲精品午夜国产va久久| 亚洲Av无码国产情品久久| 不卡视频免费在线观看| 亚洲精品不卡视频| 哒哒哒免费视频观看在线www| 国产乱妇高清无乱码免费| 亚洲视频欧洲视频| 四虎免费永久在线播放| 久久免费线看线看| 含羞草国产亚洲精品岁国产精品 | 国产成人高清亚洲| 91香蕉国产线在线观看免费| 亚洲AV无码资源在线观看| 亚洲AV无一区二区三区久久|