最近買了阿裡雲,把項目部署上去以後,每天第一次訪問總是出一次異常,然後刷新一下就正常了。經查詢資料發現,原來mysql預設會自動關閉空閑時間超過8小時的連接,而連接池並不知道這個連接已經關閉了,所以就會出異常。 查看mysql 修改wait_timeout,雖然通過修改mysql的wait_time ...
最近買了阿裡雲,把項目部署上去以後,每天第一次訪問總是出一次異常,然後刷新一下就正常了。經查詢資料發現,原來mysql預設會自動關閉空閑時間超過8小時的連接,而連接池並不知道這個連接已經關閉了,所以就會出異常。
查看mysql
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
修改wait_timeout,雖然通過修改mysql的wait_timeout值可以解決問題,但實際情況中這樣修改會影響到所有的項目,並不推薦這樣做
SET GLOBAL wait_timeout=60;
我用的是dpcp連接池,配置文件裡加入以下內容,意思是每隔timeBetweenEvictionRunsMillis毫秒檢測一次空閑時間超過minEvictableIdleTimeMillis毫秒的連接,檢測到就重連一次。
根據這個原理,可以計算出只要這兩個參數加起來小於wait_timeout即可,例如下麵每隔兩小時檢測空閑超過五小時的連接,則空閑連接最多也會在第七個小時的時候被檢測到並重連,而mysql預設是八小時,這樣就解決了問題。註意這兩個參數的單位都是毫秒,而mysql中wait_timeout的單位是秒。
<!-- 8小時問題,每隔兩小時檢測空閑超過五小時的連接 --> <property name="timeBetweenEvictionRunsMillis" value="7200000"/> <property name="minEvictableIdleTimeMillis" value="18000000"/>
原創文章,轉載請註明出處。