- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認(rèn)證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機構(gòu):新網(wǎng)數(shù)碼
網(wǎng)站訪問量大的時候mysql的壓力就比較大,當(dāng)mysql的CPU利用率超過300%的時候就不能提供服務(wù)了,近乎卡死狀態(tài),這時候最好的方法 就是重啟mysql服務(wù)。由于這種事具有不可預(yù)見性,我們不知道什么時候mysql的占用率達到300%,還是寫個程序定期判斷比較靠譜。
學(xué)了shell編程,寫了下面的腳本:
稍微解釋一下。首先執(zhí)行"ps aux"命令獲取所有系統(tǒng)進程的狀態(tài)信息,包括CPU,內(nèi)存等,如下圖:
然后通過管道將信息傳送給grep,$就是正則表達式結(jié)尾的意思,從所有的進程中找到以“mysqld”結(jié)尾的進程,其實就是mysql啦,這里返回的是mysql進程的信息,一行,如下圖:
接下來的一個cut是截斷字符串,我們要統(tǒng)計的是CPU的占用率,當(dāng)然要截取mysql的CPU數(shù)值,cut命令默認(rèn)是用tab分割的,但是ps aux顯示的字符串中的空白是空格而不是tab,我們就要用空格來分割,有的字符串之間是多個空格,這里的 -f8 參數(shù)就是截取第8個字符串(有的系統(tǒng)可能是第6個),這個字符串就是mysql的CPU占用率啦!
也許你會有疑問,既然已經(jīng)得到mysql的CPU占用率了,為什么后面還有一個cut?問的好!我當(dāng)初也沒想到這個問題。因為我們要比較CPU的占用率 嘛,這里我們?nèi)〉玫淖址且粋€浮點數(shù)(帶小數(shù)點的),但是shell編程里面是不支持浮點數(shù)比較大小的。怎么辦?那就比較整數(shù)唄,以“.”分割這個浮點 數(shù),第一個就是整數(shù)部分,這樣我們就取得了mysql占用率的整數(shù)部分。
后面就是一個判斷,如果大于300的話就就重啟mysql服務(wù)。后面還有一個命令,這個命令是一個簡單的“日志”,目的就是當(dāng)重啟一次服務(wù)就記錄一下重啟mysql的時間,便于以后分析網(wǎng)站的壓力情況。
接下來就是定期執(zhí)行這個程序了,根據(jù)情況可以5分鐘或者10分鐘執(zhí)行一次,只要編輯 /etc/crontab文件,加入如下語句:
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP