公司日本租用了阿里云機(jī)器 本身有網(wǎng)絡(luò)延遲,有一臺(tái)Linux服務(wù)器專門用來跑游戲服務(wù),由于歷史原因,加上玩家數(shù)量的劇增,導(dǎo)致經(jīng)常出現(xiàn)大量的sleep進(jìn)程;
創(chuàng)新互聯(lián)主營(yíng)黃州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),黃州h5微信小程序定制開發(fā)搭建,黃州網(wǎng)站營(yíng)銷推廣歡迎黃州等地區(qū)企業(yè)咨詢
沾上一個(gè)腳本用來殺掉sleep進(jìn)程:
while : do n=`MySQL -uroot -pfuckdba processlist | grep -i sleep | wc -l` date=`date +%Y%m%d\[%H:%M:%S]` echo $n if [ "$n" -gt 10 ] then for i in `mysqladmin -uroot -pfuckdba processlist | grep -i sleep | awk '{print $2}'` do mysqladmin -uroot -pfuckdba kill $i done echo "sleep is too many i killed it" >> /root/tmp/sleep.log echo "$date : $n" >> /root/tmp/sleep.log fi sleep 120 #每隔120 秒 執(zhí)行一次 done
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)行情況來判斷。在系統(tǒng)運(yùn)行一段時(shí)間后,可以通過show processlist命令查看當(dāng)前系統(tǒng)的連接狀態(tài),如果發(fā)現(xiàn)有大量的sleep狀態(tài)的連接進(jìn)程,則說明該參數(shù)設(shè)置的過大,可以進(jìn)行適當(dāng)?shù)恼{(diào)整小些。
經(jīng)查詢發(fā)現(xiàn)原來mysql沒有進(jìn)行過優(yōu)化,還是原來的默認(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ì)生效。
經(jīng)過測(cè)試服測(cè)試完全沒問題,重啟一下mysql 生效 即可!當(dāng)然線上的就比較坑了,由于服務(wù)器第一天租到,第二天就開始上線沒來得及優(yōu)化,很多臺(tái)里面只有一條,執(zhí)行命令比較慢,就等著下次替換文件重啟了。