自動監控VPS負載並重啟Web服務的指令碼

來源:互聯網
上載者:User

VPS其實和一般的獨立Linux伺服器,在使用上基本沒有區別,因為現在的虛擬化技術以及很成熟了,不過VPS和獨服還是有一個很大的差異,那就是系統資源和效能上。通常,VPS都是由一個獨立伺服器劃分出來的,所以在資源和效能優勢上,遠比不上獨服。

就拿前段時間本VPS受到的DDOS攻擊來說,其實DDOS也是利用大量發起的請求,導致被攻擊VPS(或伺服器)記憶體資源被耗盡,系統負載過高,而導致80連接埠的Http服務無響應,從而達到最終的攻擊目的。DDOS雖然防不勝防,不過總還是有一些辦法,能把DDOS的影響減小的。比如定時監控系統狀態,然後自動重啟Web服務,這也是本文要介紹的一種方法。

在VPS被攻擊的時候,有一些系統指標能反應出系統是否處於被攻擊狀態,一個就是查看記憶體剩餘量,當然,這並不是最準確的方法,另外一種,就是查看Linux的系統平均負載值。

Linux系統負載介紹

系統平均負載被定義為在特定時間間隔內運行隊列中的平均進程樹。如果一個進程滿足以下條件則其就會位於運行隊列中:

- 它沒有在等待I/O操作的結果

- 它沒有主動進入等待狀態(也就是沒有調用’wait’)

- 沒有被停止(例如:等待終止)

Linux系統中,通過很多命令都可以查看當前的系統平均負載值,比如:w,top或者uptime命令

命令輸出的內容表示在過去的1、5、15分鐘內運行隊列中的平均進程數量。

通常情況下,這些值會根據系統的CPU個數有一些區別,對於單核CPU來說,如果負載值達到了1,表明系統負載已經達到了100%,不過對於雙核系統來說,1隻表示系統負載值只達到50%左右。

以此類推,在多處理器系統中,負載均值是基於核心的數量決定的。以 100% 負載計算,1.00 表示單個處理器,而 2.00 則說明有兩個雙處理器,那麼 4.00 就說明主機具有四個處理器。

根據系統負載值自動重啟Web服務

下面的指令碼,以裝有Apache伺服器的VPS為例,定時判斷系統負載值,當達到5時,認為系統已經超負荷運轉,這時,指令碼會自動重啟Apache服務,釋放系統資源,以達到讓VPS伺服器平穩啟動並執行目的。

*註:指令碼來自網路,非原創,出處不明,本人做了少許改動。

#!/bin/sh
#usage: */2 * * * * root /root/checkload.sh >>/root/checkload.log

TOP_SYS_LOAD_NUM=5
SYS_LOAD_NUM=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`

echo $(date +”%y-%m-%d”) `uptime`
if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ]
then
echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “pkill httpd” `ps -ef | grep httpd | wc -l`
pkill httpd
sleep 10
for i in 1 2 3
do
if [ `pgrep httpd | wc -l` -le 0 ]
then
service httpd start
sleep 15
echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start httpd” `ps -ef | grep httpd | wc -l`
fi
done
else
if [ `pgrep httpd | wc -l` -le 0 ]
then
service httpd start
sleep 15
echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start httpd” `ps -ef | grep httpd | wc -l`
fi
fi

指令碼中TOP_SYS_LOAD_NUM表示最大允許的系統平均負載值,當超過這一值的時候,指令碼就開始重啟apache服務。指令碼的使用也挺簡便,直接到/etc/cron.d/ 建立一個定時執行檔案,填入如下內容即可:

*/2 * * * * root /root/checkload.sh >>/root/checkload.log

這裡*/2,表示每兩分鐘執行一次指定的指令碼,並將執行結果輸出到/root/checkload.log檔案中。

你也可以根據自己的需要,來修改執行頻率。

小結

此指令碼已經部署到我的VPS上一段時間,從使用的情況來看,效果還比較不錯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.