paulwong

          S2SH鏈接不關(guān)閉

          一套S2SH的應(yīng)用,現(xiàn)用單線程,連續(xù)發(fā)1000個(gè)請(qǐng)求,用的DBCP鏈接池,結(jié)果報(bào)數(shù)據(jù)庫(kù)鏈接不夠用:

          ERROR [org.hibernate.util.JDBCExceptionReporter] - Cannot get a connection, pool error Timeout waiting for idle object

          在JAVA加上LOG:
          log.info("active: " + dataSource.getNumActive() + " (max: "
                          + dataSource.getMaxActive() + ")   " + "idle: " + dataSource.getNumIdle()
                          + "(max: " + dataSource.getMaxIdle() + ")");

          結(jié)果顯示為:
          active: 25 (max: 100)   idle: 0(max: 30)

          active的數(shù)量一直增加,但idle的數(shù)量一直為0。當(dāng)程序向鏈接池要鏈接的時(shí)候,如果池沒(méi)有,就會(huì)新建一個(gè),active數(shù)就會(huì)加1,關(guān)閉鏈接后,鏈接會(huì)返回池,idle數(shù)加1。idle為0則表示池里沒(méi)有鏈接。

          這樣說(shuō)明鏈接一直在創(chuàng)建,沒(méi)有關(guān)閉放回池里。但鏈接是由SPRING和HIBERNATE管理的,代碼中沒(méi)有關(guān)閉鏈接的語(yǔ)句。之后試了N多配置,都還沒(méi)解決,如增加maxActive數(shù)等。最后,加上這一行,問(wèn)題才終于解決:

          <prop key="hibernate.connection.release_mode">after_transaction</prop>

          這里默認(rèn)值是auto,如果是用JTA事務(wù)才適用,如果是JDBC事務(wù),就只能用after_transaction。

          這樣每次事務(wù)結(jié)束后,就會(huì)關(guān)閉鏈接返回鏈接池。

          posted on 2013-06-07 15:09 paulwong 閱讀(421) 評(píng)論(0)  編輯  收藏 所屬分類: HIBERNATESPRING

          主站蜘蛛池模板: 隆子县| 卓尼县| 会东县| 大渡口区| 比如县| 丽水市| 施甸县| 灌云县| 辽阳县| 琼结县| 长治市| 潼南县| 长宁县| 合作市| 庆云县| 大荔县| 彭山县| 延庆县| 河北省| 托克逊县| 定兴县| 油尖旺区| 汤阴县| 荣昌县| 义马市| 吴桥县| 新河县| 微博| 施秉县| 广东省| 舟曲县| 宣汉县| 三亚市| 甘孜| 宣化县| 吴川市| 彩票| 芦溪县| 莲花县| 五家渠市| 新巴尔虎左旗|