公司有一臺(tái)linux服務(wù)器專門用來(lái)跑公司的web服務(wù),由于歷史原因,站點(diǎn)數(shù)與頁(yè)面非常多,導(dǎo)致經(jīng)常出現(xiàn)大量的sleep進(jìn)程;mysql服務(wù)器所支持的最大連接數(shù)是有上限的,因?yàn)槊總€(gè)連接的建立都會(huì)消耗內(nèi)存,因此我們希望客戶端在連接到mysql server處理完相應(yīng)的操作后,應(yīng)該斷開連接并釋放占用的內(nèi)存。如果你的mysql server有大量的閑置連接,他們不僅會(huì)白白消耗內(nèi)存,而且如果連接一直在累加而不斷開,最終肯定會(huì)達(dá)到mysql server的連接上限數(shù),這會(huì)報(bào)’too many connections’的錯(cuò)誤。對(duì)于wait_timeout的值設(shè)定,應(yīng)該根據(jù)系統(tǒng)的運(yùn)行情況來(lái)判斷。在系統(tǒng)運(yùn)行一段時(shí)間后,可以通過(guò)show processlist命令查看當(dāng)前系統(tǒng)的連接狀態(tài),如果發(fā)現(xiàn)有大量的sleep狀態(tài)的連接進(jìn)程,則說(shuō)明該參數(shù)設(shè)置的過(guò)大,可以進(jìn)行適當(dāng)?shù)恼{(diào)整小些。
經(jīng)查詢發(fā)現(xiàn)原來(lái)mysql沒(méi)有進(jìn)行過(guò)優(yōu)化,還是原來(lái)的默認(rèn)值:28800(即8個(gè)小時(shí))
編輯 /etc/my.cnf,在mysqld 下 新增 timeout參數(shù),設(shè)置為120秒,如下:
【mysqld】
wait_timeout=120
interactive_timeout=120注意:要同時(shí)設(shè)置interactive_timeout和wait_timeout才會(huì)生效。
最后重啟一下mysql 生效即可!
當(dāng)然你也可以寫shell腳本去控制,但是不僅建議這么操作!