启动tomcat出现too many connections的原因及解决方法
產生too many connections 的直接原因是因為數據庫提供的連接被全部占滿了。數據庫可以提供多少連接,可以再my.cnf(linux)或者my.ini(windows)下設定。這個直接原因的上一次原因是引用程序占據連接不釋放。至于為何不釋放,那就是各個應用程序的具體問題了。
??之前 ,遇到這個問題時,在網上找了很多關于這方面的資料,發現都不能解決這方面的問題。網上的資料只能提供一個共性的解決方案,無法提供個性的解決方案。而且,感覺網上的資料隨意轉載 ,沒說明應用環境,有點不負責任。所以,從這個事件中,我感受到,解決自己的問題,還是得靠自己的邏輯分析。
?在使用數據庫連接池時,會配置數據庫連接池的最小連接數,最大連接數以及默認連接數。在初始化數據庫連接池時,配置的最小連接數就會來占據數據庫提供的連接,而且這個連接是關閉tomcat之前,不會被釋放的。列如:如果你配置的數據庫連接池最小的連接數是20,那么,在tomcat上啟動該應用程序,在用Mysql的線程查看命令:mysql>show processlist;時,你會發現,會有21條線程。這是因為會留有一條線程用于操作。show processlist命令顯示的是Thread_connected,當Thread_connected與max_connections相等時,在企圖進行數據庫連接,就會出現too many connections的錯誤。
?如果將數據庫連接池交由spring管理,那么,每初始化一個spring管理容器,就會初始化一個數據庫連接池,也就是(以上面配置的數據庫連接池最小連接數為例)說,會占據20個數據庫提供的線程,而且除非停掉tomcat,否則不會釋放。這種情況下,若采用ClassPathApplicationContext(具體不太記得了,大概就這個意思)這種方式來開啟一個spring容器,那么,而程序又是要被周期性調度執行,那么數據庫的連接數無論被設為多大都沒用。時間一長,就會出現too many connections的錯誤
二、解決方法
打開MYSQL安裝目錄打開MY.INI找到max_connections(在大約第93行)默認是100?一般設置到500~1000比較合適,重啟mysql,這樣1040錯誤就解決啦。
max_connections=1000
?
在日常的MySQL服務器中,wait-timeout這個參數非常有用。
(在部分MySQL的默認配置中可能沒有wait-timeout這個參數項,你在[mysqld]節中加上即可)
參數意義:MySQL客戶端的數據庫連接閑置最大時間值。
參數默認值:默認值為8小時?。
這個參數的大概意思是某一個MySQL客戶端連接閑置的最大時間值,即某一個MySQL客戶端連接過程中,閑置的最大時間到達后服務器將其關閉。
MySQL服務器所支撐的最大連接數是有限的,因為每一個連接、第一個表打開的操作都要消耗服務器內存,理想狀態是當一個MySQL客戶端連接完成工作就自動斷開釋放內存,如果你的你的網站有大量的MySQL鏈接請求,這些連接完成SQL執行任務后空閑著啥事也不干,白白占用內存資源,如果?這些連接堆積起來,將導致MySQL超過最大連接數,從而無法新建MySQL連接,有可能導致“Too?many?connections”的錯誤。
可以在設置之前用show?processlist查看一下MySQL狀態,如果你發現你的MYSQL中有大量的Sleep進程,那么你真的需要設置你的wait-timeout了。依你的程序而定設置多大的值?,我的設置wait-timeout=10,MySQL中的所有Sleep線程最多只能“睡”10秒,之后就被強行關閉了。?
轉載于:https://www.cnblogs.com/phi76ers3/p/10414670.html
總結
以上是生活随笔為你收集整理的启动tomcat出现too many connections的原因及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东白条和花呗一样吗?哪个好?
- 下一篇: 农业银行信用卡账单分期手续费率多少?申请