<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

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



    異常截圖

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

    經過查看官方文檔:http://www.mchange.com/projects/c3p0/#statementCacheNumDeferredCloseThreads



    解釋:如果把該值設為超過1,statement的緩存就會自動跟蹤當前可用的connections,如果沒有再用,就會自動銷毀掉。如果需要另外的線程來專門銷毀緩存的statement,則還需要設置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就會發生作用。

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



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



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





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

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


    網站導航:
     
    主站蜘蛛池模板: 嫩草在线视频www免费观看| 国产免费区在线观看十分钟| 最近中文字幕电影大全免费版 | 爱情岛论坛亚洲品质自拍视频网站| 亚洲一区二区三区免费在线观看| 久久夜色精品国产亚洲AV动态图| 国产色无码精品视频免费| 中文字幕亚洲第一| 最好免费观看高清在线 | 自怕偷自怕亚洲精品| 中文字幕在线观看免费视频 | 色爽黄1000部免费软件下载| 久久久久亚洲AV成人网人人网站| 国产高潮久久免费观看| 亚洲AV无码码潮喷在线观看| 久久免费的精品国产V∧| 亚洲国产日韩在线人成下载| 天天摸天天操免费播放小视频| 国产成人亚洲精品电影| 中文亚洲AV片在线观看不卡 | 成人片黄网站色大片免费观看APP| 国产AV无码专区亚洲AVJULIA| 猫咪免费人成网站在线观看| 国产成人精品日本亚洲网址| 国产三级电影免费观看| 拍拍拍无挡视频免费观看1000| 亚洲黄色网站视频| 在线观看永久免费视频网站| eeuss影院ss奇兵免费com| 亚洲男人都懂得羞羞网站| 青青青国产在线观看免费网站| 亚洲欧美在线x视频| 亚洲中文字幕无码一区| 黄色网址免费观看| 免费看一级一级人妻片| 久久久久亚洲AV无码网站| 日韩伦理片电影在线免费观看| a级毛片免费完整视频| 精品亚洲成A人无码成A在线观看| 四虎精品亚洲一区二区三区| 午夜精品射精入后重之免费观看|