隨筆 - 251  文章 - 504  trackbacks - 0
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          本博客系個(gè)人收集材料及學(xué)習(xí)記錄之用,各類“大俠”勿擾!

          留言簿(14)

          隨筆分類

          收藏夾

          My Favorite Web Sites

          名Bloger

          非著名Bloger

          搜索

          •  

          積分與排名

          • 積分 - 204316
          • 排名 - 283

          最新評(píng)論

                   一個(gè)都起灰塵的項(xiàng)目,最近出現(xiàn)一個(gè)問題。描述如下:當(dāng)天使用很正常,到了第二天就不能登錄使用,具體的說不能訪問數(shù)據(jù)庫。重啟“小貓”之后,能正常使用,但到第二天又不行啦。根據(jù)日志分析,是MySQL數(shù)據(jù)庫連接關(guān)閉了。
          “java.sql.SQLException
          MESSAGE: Communication link failure: java.net.SocketException, underlying cause: Software caused connection abort: recv failed”.

                  上網(wǎng)查了些帖子,發(fā)現(xiàn)可能是MySQL5.0版本的一個(gè)bug:超時(shí)問題。MySQL默認(rèn)等待時(shí)間間隔wait_timeout是8小時(shí),也就是8小時(shí)內(nèi),我們的系統(tǒng)沒有使用,沒有對(duì)數(shù)據(jù)庫進(jìn)行訪問的話,數(shù)據(jù)庫會(huì)關(guān)閉連接,而當(dāng)我們系統(tǒng)用這些連接對(duì)數(shù)據(jù)庫進(jìn)行訪問時(shí),就會(huì)出現(xiàn)上述問題。
                    解決辦法有2種:
          1. 對(duì)于MySQL5之前的版本,如Mysql4.x,只需要修改連接池配置中的URL,添加一個(gè)參數(shù):autoReconnect=true,如果是MySQL5及以后的版本,則需要修改my.ini文件。在[mysqld]后面添加上: wait_timeout=1814400,把默認(rèn)的8小時(shí)盡量延長(zhǎng)。
          2. 采用第三方的數(shù)據(jù)庫連接池來管理連接, 如,proxool、C3P0等。性能方面據(jù)說proxool更強(qiáng)些。由于該系統(tǒng)用了hibernate,對(duì)C3P0支持比較好,C3P0.jar包無需另外下載。C3P0和hibernate的配置也相對(duì)簡(jiǎn)單,如下,
                   先把C3P0.jar包拷貝到WEB-INF\lib下,然后修改hibernate.cfg.xml文件,加入以下內(nèi)容:
          <!--C3P0 setting-->
                  <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
                  <property name="hibernate.c3p0.min_size">2</property>
                  <property name="hibernate.c3p0.timeout">5000</property>
                  <property name="hibernate.c3p0.max_statements">100</property>
                  <property name="hibernate.c3p0.idle_test_period">3000</property>
                  <property name="hibernate.c3p0.acquire_increment">2</property>
                  <property name="hibernate.c3p0.validate">false</property>

                   這樣基本可以解決MySQL的超時(shí)問題,如何檢查該方法是否有效呢?可以通過修改服務(wù)器的系統(tǒng)日期,把日期往前推幾個(gè)月,然后再訪問系統(tǒng),看是否還報(bào)錯(cuò)。
          posted on 2009-06-22 14:56 matthew 閱讀(935) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(Sql server,My sql)

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大城县| 四子王旗| 濮阳县| 陆河县| 论坛| 商河县| 手游| 九江市| 左贡县| 洛川县| 徐水县| 宝山区| 沛县| 内乡县| 浙江省| 连云港市| 永吉县| 西青区| 新晃| 贺兰县| 连州市| 灌云县| 寿阳县| 潮州市| 缙云县| 西和县| 汝城县| 容城县| 三亚市| 巴里| 竹溪县| 阳泉市| 含山县| 景宁| 蓬安县| 景泰县| 休宁县| 双牌县| 潼南县| 南江县| 陆良县|