VPS其實和一般的獨立Linux服務(wù)器,在使用上基本沒有區(qū)別,因為現(xiàn)在的虛擬化技術(shù)以及很成熟了,不過VPS和獨服還是有一個很大的差異,那就是系統(tǒng)資源和性能上。通常,VPS都是由一個獨立服務(wù)器劃分出來的,所以在資源和性能優(yōu)勢上,遠(yuǎn)比不上獨服。
就拿前段時間本VPS受到的DDOS攻擊來說,其實DDOS也是利用大量發(fā)起的請求,導(dǎo)致被攻擊VPS(或服務(wù)器)內(nèi)存資源被耗盡,系統(tǒng)負(fù)載過高,而導(dǎo)致80端口的Http服務(wù)無響應(yīng),從而達(dá)到最終的攻擊目的。DDOS雖然防不勝防,不過總還是有一些辦法,能把DDOS的影響減小的。比如定時監(jiān)控系統(tǒng)狀態(tài),然后自動重啟Web服務(wù),這也是本文要介紹的一種方法。
在VPS被攻擊的時候,有一些系統(tǒng)指標(biāo)能反應(yīng)出系統(tǒng)是否處于被攻擊狀態(tài),一個就是查看內(nèi)存剩余量,當(dāng)然,這并不是最準(zhǔn)確的方法,另外一種,就是查看Linux的系統(tǒng)平均負(fù)載值。
Linux系統(tǒng)負(fù)載介紹
系統(tǒng)平均負(fù)載被定義為在特定時間間隔內(nèi)運行隊列中的平均進(jìn)程樹。如果一個進(jìn)程滿足以下條件則其就會位于運行隊列中:
- 它沒有在等待I/O操作的結(jié)果
- 它沒有主動進(jìn)入等待狀態(tài)(也就是沒有調(diào)用’wait’)
- 沒有被停止(例如:等待終止)
Linux系統(tǒng)中,通過很多命令都可以查看當(dāng)前的系統(tǒng)平均負(fù)載值,比如:w,top或者uptime命令
命令輸出的內(nèi)容表示在過去的1、5、15分鐘內(nèi)運行隊列中的平均進(jìn)程數(shù)量。
通常情況下,這些值會根據(jù)系統(tǒng)的CPU個數(shù)有一些區(qū)別,對于單核CPU來說,如果負(fù)載值達(dá)到了1,表明系統(tǒng)負(fù)載已經(jīng)達(dá)到了100%,不過對于雙核系統(tǒng)來說,1只表示系統(tǒng)負(fù)載值只達(dá)到50%左右。
以此類推,在多處理器系統(tǒng)中,負(fù)載均值是基于內(nèi)核的數(shù)量決定的。以 100% 負(fù)載計算,1.00 表示單個處理器,而 2.00 則說明有兩個雙處理器,那么 4.00 就說明主機具有四個處理器。
根據(jù)系統(tǒng)負(fù)載值自動重啟Web服務(wù)
下面的腳本,以裝有Apache服務(wù)器的VPS為例,定時判斷系統(tǒng)負(fù)載值,當(dāng)達(dá)到5時,認(rèn)為系統(tǒng)已經(jīng)超負(fù)荷運轉(zhuǎn),這時,腳本會自動重啟Apache服務(wù),釋放系統(tǒng)資源,以達(dá)到讓VPS服務(wù)器平穩(wěn)運行的目的。
根據(jù)系統(tǒng)負(fù)載值自動重啟Web服務(wù)
下面的腳本,以裝有Apache服務(wù)器的VPS為例,定時判斷系統(tǒng)負(fù)載值,當(dāng)達(dá)到5時,認(rèn)為系統(tǒng)已經(jīng)超負(fù)荷運轉(zhuǎn),這時,腳本會自動重啟Apache服務(wù),釋放系統(tǒng)資源,以達(dá)到讓VPS服務(wù)器平穩(wěn)運行的目的。
#!/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表示最大允許的系統(tǒng)平均負(fù)載值,當(dāng)超過這一值的時候,腳本就開始重啟apache服務(wù)。腳本的使用也挺簡便,直接到/etc/cron.d/ 建立一個定時執(zhí)行文件,填入如下內(nèi)容即可:
*/2 * * * * root /root/checkload.sh >>/root/checkload.log這里*/2,表示每兩分鐘執(zhí)行一次指定的腳本,并將執(zhí)行結(jié)果輸出到/root/checkload.log文件中。 你也可以根據(jù)自己的需要,來修改執(zhí)行頻率。 小結(jié) 此腳本已經(jīng)部署到我的VPS上一段時間,從使用的情況來看,效果還比較不錯。