
以前我們的Web服務器中多次出現Apache負載過高引起機器死機或者很長時間才能恢複正常的情況,後來在網上找了一個自動監控Linux系統Average Load的程序,當這個值大于設定值的時候,會自動重啟Apache,我們在Crontab中設置的是每2分鐘執行這個.sh腳本,并進行情況記錄,使用中覺得還是很有用的。
而MySQL超時的問題以前比較罕見,但最近因為數據量越來越大,也常發現在PROCESSLIST中看到超過數百、數千甚至上萬秒的進程,這個時候機器的負載極高,網站無法訪問。
老是人工守着查看超時進程并Kill不是一個可行的辦法,在網上找到下面一個Linux Shell腳本:
DB_HOST="localhost"
DB_PORT=3306
DB_USER="root"
DB_PASS=""
maxtime=300
sql="SHOW PROCESSLIST"
sss=$(/usr/bin/mysqladmin processlist-p -h$DB_HOST $DB_PASS|sed -e "s/\s//g"|awk -F'|' '{print $2,$7,substr($9,1,6)}'|awk '{if($2>'"$maxtime"' && $3=="SELECT"){print $1}}')
for pid in $(echo "$sss"); do
/usr/bin/mysql -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASS -e "kill $pid"
done
echo "$sss"
date
保存為checkmysql.sh,試運行了一下,應該是有用的,于是在crontab中設置:
*/3 * * * * root /root/checkmysql.sh >>/root/checkmysql.log
也就是每3分鐘運行一次這個腳本,對于超過300秒(5分鐘)的MySQL進程強行删除終止,防止拖累整個服務器以緻所有網站。實際效果還要運行一段時間來看看checkmysql.log中的記錄。
自由标簽
          
       
      
评论