連接無法釋放導致的程序問題解決

        今天在發佈了一個應用程序的新版本後,出現了操作一段時間以後頁面便死在那裏無法操作,點擊新的鏈接無反應,但點擊已操作過的鏈接時卻可以顯示頁面。程序框架爲Srping+hibernate+struts。初步判斷是否是無法從數據庫連接池獲得可用連接,所以在連接池滿了以後新的操作便由於無法獲得數據庫連接而等待,表現爲頁面無法操作。查看後臺日誌沒有報無法獲得連接的錯誤。用netstat看網絡連接情況,發現mysql的連接很多,但好像沒有達到連接池上限。重啓應用後用netstat觀察,發現mysql連接增長很快,到了某一個數量的時候,程序便無法操作了。爲了對比,恢復了老版本的應用,同樣用netstat觀察連接,發現mysql連接增長緩慢。由對比判斷,是有程序沒有釋放mysql連接,導致連接池滿。查看應用配置文件,發現把service的層的事務處理的攔截器給註釋掉了,重新開放後問題解決。由此判斷,應該是事務沒有提交,導致連接一直佔用,沒有返還到連接池。
        由於這個DataSource使用的是c3p0的連接池,上網查了一下,發現c3p0有連接管理的問題,猜想大概是因爲這個導致程序的問題的。網上說使用dbcp不會有這樣的問題,dbcp的連接管理比較好一點。目前沒有深究,有空的話可以做些實驗,比較一下常用的幾個連接池的效果。(c3p0,dbcp,spring datasource)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章