Dev Zone
          偏執狂才能生存,人生/事業的路上需要再堅持一下
          但是又怎么說得清堅持的結果,道得盡堅持的含義
          現狀:我們的項目中使用了ofbiz2.1,并采用JotmFactory作為TransactionFactory,使用Oracle9i數據庫,在大并發測試的時候發現數據庫游標暴漲并且不釋放,最終導致游標溢出。
           
          原因分析:ofbiz  entityengine的很多操作都是使用PreparedStatement完成的,這無可厚非,問題是JotmFactory采用的是XAPool作為連接池,而XAPool對PreparedStatement進行了Cache,同時Oracle有一個出名的內存漏洞,PreparedStatement使用之后必須關閉,如果不關閉連續進行SQL查詢會造成前面SQL的游標不能釋放;此外JotmConnectionFactory沒有允許對XAPool做更多的配置,按照它使用XAPool的方式,XAPool會對PreparedStatement進行Cache。Oracle漏洞+ofbiz的不周全的使用方式+xapool的機制造成了游標不釋放最終溢出的異常。
           
           
          解決辦法:修改JotmConnectionFactory,調用StandardXAPoolDataSource的setPreparedStmtCacheSize(int)的方法,將preparedStmtCacheSize設置為0。需要注意的是xapool在目前的版本(1.4)當preparedStmtCacheSize=0的時候存在一個bug,close PreparedStatement的時候會報NullPointerException,請參考我的另一個日志XAPool1.4的bug
           
          posted on 2005-05-17 22:06 dev 閱讀(563) 評論(0)  編輯  收藏

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


          網站導航:
           
           
          主站蜘蛛池模板: 陇南市| 垦利县| 黑河市| 金阳县| 武夷山市| 宝坻区| 巨鹿县| 名山县| 乡城县| 绿春县| 吉隆县| 古田县| 寿阳县| 武宁县| 沛县| 宣武区| 库伦旗| 连云港市| 泗洪县| 布尔津县| 余庆县| 丽水市| 鞍山市| 松桃| 汝州市| 闽清县| 恭城| 登封市| 花莲市| 万山特区| 迁西县| 泸州市| 海阳市| 马尔康县| 江山市| 荔浦县| 元谋县| 镇雄县| 新疆| 安平县| 龙游县|