shell編程檢測監控mysql的CPU佔用率

來源:互聯網
上載者:User

       shell編程很強大!

       網站訪問量大的時候mysql的壓力就比較大,當mysql的CPU利用率超過300%的時候就不能提供服務了,近乎卡死狀態,這時候最好的方法就是重啟mysql服務。由於這種事具有不可預見性,我們不知道什麼時候mysql的佔用率達到300%,還是寫個程式定期判斷比較靠譜。

        學了shell編程,寫了下面的指令碼:

#!/bin/bashcpu=`ps aux | grep 'mysqld$' | cut -d " " -f6 | cut -d. -f1`if [ $cpu -gt 300 ]then    service mysql restart && date >> /tmp/mysql.logfi

 

       稍微解釋一下。首先執行"ps aux"命令擷取所有系統進程的狀態資訊,包括CPU,記憶體等,如:

然後通過管道將資訊傳送給grep,$就是Regex結尾的意思,從所有的進程中找到以“mysqld”結尾的進程,其實就是mysql啦,這裡返回的是mysql進程的資訊,一行,如:

      接下來的一個cut是截斷字串,我們要統計的是CPU的佔用率,當然要截取mysql的CPU數值,cut命令預設是用tab分割的,但是ps aux顯示的字串中的空白是空格而不是tab,我們就要用空格來分割,有的字串之間是多個空格,這裡的 -f8 參數就是截取第8個字串(有的系統可能是第6個),這個字串就是mysql的CPU佔用率啦!

      也許你會有疑問,既然已經得到mysql的CPU佔用率了,為什麼後面還有一個cut?問的好!我當初也沒想到這個問題。因為我們要比較CPU的佔用率嘛,這裡我們取得的字串是一個浮點數(帶小數點的),但是shell編程裡面是不支援浮點數比較大小的。怎麼辦?那就比較整數唄,以“.”分割這個浮點數,第一個就是整數部分,這樣我們就取得了mysql佔用率的整數部分。

      後面就是一個判斷,如果大於300的話就就重啟mysql服務。後面還有一個命令,這個命令是一個簡單的“日誌”,目的就是當重啟一次服務就記錄一下重啟mysql的時間,便於以後分析網站的壓力情況。

      接下來就是定期執行這個程式了,根據情況可以5分鐘或者10分鐘執行一次,只要編輯 /etc/crontab檔案,加入如下語句:

*/5 ** * *root/home/ma6174/mysql_restart.sh
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.