讓那些mysql裏睡覺的進程,悄悄的死去吧。

  公司日本租用了阿里雲機器 本身有網絡延遲,有一臺Linux服務器專門用來跑遊戲服務,由於歷史原因,加上玩家數量的劇增,導致經常出現大量的sleep進程;

wKiom1jmB5_QoG-8AABDaa2R1HA863.png


沾上一個腳本用來殺掉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狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。


wKiom1jmBp_BLjBpAAA64MxBX-E177.png


經查詢發現原來mysql沒有進行過優化,還是原來的默認值:28800(即8個小時)

編輯 /etc/my.cnf,在mysqld 下 新增 timeout參數,設置爲120秒,如下:

【mysqld】

wait_timeout=120

interactive_timeout=120


注意:要同時設置interactive_timeout和wait_timeout纔會生效。


經過測試服測試完全沒問題,重啓一下mysql 生效 即可!當然線上的就比較坑了,由於服務器第一天租到,第二天就開始上線沒來得及優化,很多臺裏面只有一條,執行命令比較慢,就等着下次替換文件重啓了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章