1. 程式人生 > >C3P0資料庫連線池因網路阻塞出現的問題

C3P0資料庫連線池因網路阻塞出現的問題

我手上有一個簡訊傳送的系統,每天傳送量大約3萬的樣子,有天突然崩潰,看到資料庫連線池一直在報錯,很慌亂的重啟了系統,沒用效果.

之前選擇資料庫連線池時,看hibernate推薦c3p0,就下載了最新的版本,之前一直工作穩定.去到google下,發現好多問這個問題,原來是他新版本的一個bug,之後調整引數,

依然無效,登陸到mysql檢視(SHOW VARIABLES; )到最大連線數是100,當前使用連線數是93(show  processlist)而且都是sleep狀態,修改最大連線數為1000 SET GLOBAL max_connections=1000

無效,檢視日誌發現丟擲nullpoint異常,可喜,已經極少報那個bug的異常了,檢視程式碼,發現沒有捕獲這個異常,修改程式碼,檢視系統記憶體佔用情況,free -m,發現記憶體只有1G,難道是記憶體壞了嗎,搞好了記憶體(2G),同時修改resin最大記憶體為1G

無效,換成DBCP,觀察日誌,發現停止響應,手動登陸mysql,登陸不上.爆笑,原來mysql的那個機房網路壞掉,到今天30小時耶都沒恢復,我現在分析可能因為和mysql連線是用外網ip導致建立連線時間過長,同時我的超時時間太短才造成報空指標吧.看c3p0文件說,當連線池用完時客戶端呼叫getConnection()後等待獲取新連線的時間,超時後將丟擲SQLException,可是我一直沒用捕獲到,不知道怎麼回事

今天機房網路恢復了.程式執行正常.總結一下,就是因為網路原因導致的程式丟擲異常.我很奇怪,c3p0為什麼丟擲null指標異常呢.為什麼不是網路異常.