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

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

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

    隨筆-35  評論-33  文章-0  trackbacks-0

          已經(jīng)一個多月沒有寫東西了,不過最近確實很忙。前兩天在線上碰到一個C3P0的鏈接死鎖的異常,話說這個上古神物 ,我已經(jīng)是很久不碰了。先貼異常



    異常截圖

    "apparent deadlocks":名詞解釋是說c3p0拿到鏈接之后,最終使用之后沒有返回到pool,導(dǎo)致死鏈檢測失敗。經(jīng)過在stack Overflow檢索,https://stackoverflow.com/questions/3730844/c3p0-apparent-deadlock-when-the-threads-are-all-empty.發(fā)現(xiàn)增加一個statementCacheNumDeferredCloseThreads該參數(shù)的定義,就可以避免這個問題。

    經(jīng)過查看官方文檔:http://www.mchange.com/projects/c3p0/#statementCacheNumDeferredCloseThreads



    解釋:如果把該值設(shè)為超過1,statement的緩存就會自動跟蹤當(dāng)前可用的connections,如果沒有再用,就會自動銷毀掉。如果需要另外的線程來專門銷毀緩存的statement,則還需要設(shè)置maxStatements與maxStatementsPerConnection。

    再貼一個官方的說明:

    Configuring Statement Pooling

    c3p0 implements transparent PreparedStatement pooling as defined by the JDBC spec. Under some circumstances, statement pooling can dramatically improve application performance. Under other circumstances, the overhead of statement pooling can slightly harm performance. Whether and how much statement pooling will help depends on how much parsing, planning, and optimizing of queries your databases does when the statements are prepared. Databases (and JDBC drivers) vary widely in this respect. It's a good idea to benchmark your application with and without statement pooling to see if and how much it helps.

    You configure statement pooling in c3p0 via the following configuration parameters:

    maxStatements

    maxStatementsPerConnection

    statementCacheNumDeferredCloseThreads

    maxStatementsis JDBC's standard parameter for controlling statement pooling.maxStatementsdefines the total numberPreparedStatementsa DataSource will cache. The pool will destroy the least-recently-used PreparedStatement when it hits this limit. This sounds simple, but it's actually a strange approach, because cached statements conceptually belong to individual Connections; they are not global resources. To figure out a size formaxStatementsthat does not "churn" cached statements, you need to consider the number offrequently usedPreparedStatements in your application,and multiply that by the number of Connections you expect in the pool (maxPoolSizein a busy application).

    maxStatementsPerConnectionis a non-standard configuration parameter that makes a bit more sense conceptually. It defines how many statements each pooled Connection is allowed to own. You can set this to a bit more than the number ofPreparedStatementsyour applicationfrequentlyuses, to avoid churning.

    If either of these parameters are greater than zero, statement pooling will be enabled. If both parameters are greater than zero, both limits will be enforced. If only one is greater than zero, statement pooling will be enabled, but only one limit will be enforced.

    大概意思就是這兩個,有一個值如果大于0,c3p0的statement pool就會發(fā)生作用。

    以上所有的配置都是基于c3p0的最新版本。PS一下,還是2015年的JAR。



    通過引入最新的C3P0包,另外增加了兩段配置,線上觀察兩天,問題解決。



    最后打個小廣告,JAVA世界最快的JDBC連接池,非HikariCP莫屬。已經(jīng)甩c3p0好幾個街角,有圖有真像。





    我的微信公眾號,歡迎溝通學(xué)習(xí)。
    posted on 2017-11-10 15:25 alexcai 閱讀(1809) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 人成午夜免费大片在线观看| 99久久免费精品高清特色大片| 亚洲日韩在线第一页| 国产一级淫片a免费播放口| 亚洲13又紧又嫩又水多| 亚洲精品视频在线观看你懂的 | 亚洲免费视频在线观看| 色天使亚洲综合在线观看| 亚洲精品无码永久在线观看| 久草福利资源网站免费| 亚洲国产av玩弄放荡人妇| 国产成人亚洲综合色影视| 日韩a级毛片免费观看| 国产精成人品日日拍夜夜免费| 亚洲人成人伊人成综合网无码| 亚洲成av人片天堂网| 国产zzjjzzjj视频全免费| 久久久免费精品re6| 日韩在线视频免费| 亚洲一级片在线观看| 国产亚洲精品一品区99热| 女人18毛片水真多免费看| 久久精品人成免费| 一级做a爱过程免费视频高清| 亚洲一级片在线观看| 亚洲动漫精品无码av天堂| 波多野结衣免费视频观看| 91频在线观看免费大全| 黄视频在线观看免费| 日韩在线视精品在亚洲| 亚洲国产精品综合久久20| 亚洲A∨无码一区二区三区| 亚洲乱码国产一区网址| 国产高清免费在线| 中文字幕无码成人免费视频| 日本一卡精品视频免费| 两性色午夜视频免费播放| 青青久久精品国产免费看| 亚洲国产日韩a在线播放| 亚洲w码欧洲s码免费| 久久亚洲国产成人精品性色|