您好,登錄后才能下訂單哦!
公司日本租用了阿里云機器 本身有網絡延遲,有一臺Linux服務器專門用來跑游戲服務,由于歷史原因,加上玩家數量的劇增,導致經常出現大量的sleep進程;
沾上一個腳本用來殺掉sleep進程:
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 秒 執行一次 done
MySQL服務器所支持的最大連接數是有上限的,因為每個連接的建立都會消耗內存,因此我們希望客戶端在連接到MySQL Server處理完相應的操作后,應該斷開連接并釋放占用的內存。如果你的MySQL Server有大量的閑置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL Server的連接上限數,這會報'too many connections'的錯誤。對于wait_timeout的值設定,應該根據系統的運行情況來判斷。在系統運行一段時間后,可以通過show processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。
經查詢發現原來mysql沒有進行過優化,還是原來的默認值:28800(即8個小時)
編輯 /etc/my.cnf,在mysqld 下 新增 timeout參數,設置為120秒,如下:
【mysqld】
wait_timeout=120
interactive_timeout=120
注意:要同時設置interactive_timeout和wait_timeout才會生效。
經過測試服測試完全沒問題,重啟一下mysql 生效 即可!當然線上的就比較坑了,由于服務器第一天租到,第二天就開始上線沒來得及優化,很多臺里面只有一條,執行命令比較慢,就等著下次替換文件重啟了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。