伺服器高負載因何而起?
下列項目的過度使用會直接導緻高負載問題:
CPU
記憶體(包括虛拟記憶體)
磁盤I/O
該如何檢查這些項目?
這取決于大家是要審查目前資源使用情況還是曆史資源使用情況。當然,在本文中我們将從這兩方面進行探讨。
關于sar的簡要說明
曆史資源使用情況可通過sar工具檢視,該工具在預設情況下應該通過sysstat軟體包安裝在所有cPanel伺服器當中。隻要通過cron指令對sysstat進行周期性執行(/etc/cron.d/sysstat),伺服器的運作狀态資料就會被收集起來。如果cron沒有運作,sysstat将無法收集曆史統計結果。
要在sar中檢視曆史資源使用情況,我們必須為檔案提供與統計資料相符的路徑。
舉例來說,如果大家打算檢視本月23号以來伺服器的平均負載狀況,可以運作以下指令:
代碼:
以上指令中的-q用于擷取平均負載資訊,而-f則用于指定sar從哪個檔案中擷取資訊。請注意,sar可能無法使用一周之前乃至更早的運作資訊。
如果大家打算檢視目前日期的統計資訊,則不必為其指令具體時間。輸入以下指令即可顯示今天的平均負載情況:
我們強烈建議大家閱讀sar說明文檔:
它所提供的統計資訊能夠幫助我們确切掌握伺服器的運作狀态。
目前CPU使用情況
運作top,并在Cpu(s)一行中檢查%id部分所顯示的閑置CPU百分比。該數字越高結果越好,說明CPU的工作負載不強。處于99%閑置狀态下的CPU幾乎沒有處理任何實際任務,而處于1%閑置狀态下的CPU則意味着接近滿載。
提示:可加寫P根據消耗CPU資源的多少對程序加以分類。
曆史CPU使用情況
檢視“%idle”列:
目前記憶體使用情況
提示:運作top c并加寫M可檢視哪個程序占用的記憶體量最大。
曆史記憶體使用情況
根據sar版本的不同,指令内容也有所差別。早期版本通過添加“-r”參數顯示記憶體使用百分比與虛拟記憶體使用百分比,但新版本則改用“-s”參數顯示虛拟記憶體使用百分比。
Check %memused and %swpused:
或者:
記憶體使用情況提示:伺服器記憶體占用量較高的情況其實非常正常。這是因為記憶體的讀寫速度及效率遠高于伺服器磁盤,是以作業系統傾向于将記憶體作為緩沖機制預先載入資料,進而提高資料讀取速度。
同樣,記憶體使用百分比也并不是什麼大問題(除非大家沒有設定虛拟記憶體分區,但這也與記憶體本身無關)。大家真正需要關注的是虛拟記憶體使用百分比,因為隻有在伺服器的實體記憶體被全部占用後、虛拟記憶體才會接替而上發揮作用。這一數字越低,就說明伺服器的運作狀态越好。如果虛拟記憶體使用率為0%,則意味着我們的伺服器能夠完全利用實體記憶體執行任務。
那麼虛拟記憶體使用率達到多少才算過高?這取決于大家自己的感覺。一般來說,如果虛拟記憶體使用率一直不高、那麼我們的伺服器的運作狀态還是比較理想的。如果大家發現虛拟記憶體使用率随時間不斷提升(例如由1%到7%再到32%),這就代表伺服器上的某些程序正在瘋狂吞噬記憶體,我們需要及時展開調查以了解具體情況(而不該直接安裝更多記憶體)。一旦伺服器用盡了所有實體記憶體與虛拟記憶體,那麼整套系統的運作将變得極為緩慢,需要經過重新開機才能暫時恢複正常。
目前磁盤I/O使用情況
注意:這一項對于OpenVZ/Virtuozzo容器不起作用。
以下指令将以每秒一次的頻率連續顯示十次磁盤使用率統計。請大家關注顯示結果中的%util列:
曆史磁盤I/O使用情況
優秀的系統管理者能夠準确把握伺服器負載的基準線,并在目前負載超出基準時立即做出判斷。這樣做的主要目的(除了防止伺服器陷入半癱瘓并不得不重新啟動之外)是為了及時了解負載高企時伺服器正在運作哪些項目。快速反應能幫助大家在發現問題後第一時間進行故障排查。
如果伺服器負載過高的狀況出現在淩晨兩點到四點之間,那麼正在熟睡中的我們肯定無法馬上展開調查。雖然sar會一直守護在伺服器身邊,幫我們收集這段時間内到底哪些資源的使用率居高不下,但卻無法揭示問題出現的實際原因。引發負載過高的原因多種多樣,其中包括DoS攻擊、垃圾郵件攻擊、php腳本設計不當、網絡蜘蛛在繪制網絡圖譜時太過積極、硬體故障、針對使用者MySQL資料庫的磁盤寫入量暴增等等。
好消息是,大家可以利用工具收集這些資訊,并在負載過高後将結果自動發送過來。如何實作?從程序清單入手:
代碼:
我建立了一個shell腳本,以我曾經管理過的伺服器上的一套perl腳本為基礎。這套腳本與其它伺服器監控工具(例如Nagios)配合起來給我的工作帶來諸多便利。它能檢查六種不同項目(下面将詳細介紹),并在程序清單中的條目超出門檻值時向我發送郵件通知。
注意:cPanel公司對該腳本的開發、維護或技術支援不承擔責任。請不要就這款腳本提出服務申請。如果您在使用中遇到任何問題,請到相關論壇上發帖或請教有經驗的系統管理者。cPanel不提供與此腳本相關的任何支援。
它所檢查的具體資源對象如下:
一分鐘平均負載
虛拟記憶體使用數量(機關為KB)
記憶體使用數量(機關為KB)
每秒接收資料包數量
每秒發出資料包數量
程序總數
如何使用腳本
要自動運作此腳本,大家需要設定一項cron任務并根據實際情況設定運作頻率。我發現每五分鐘運作一次是個不錯的選擇。該腳本無需使用root身份運作,既然如此我們也就不必為其配置設定高權限。
如果上述監控資源對象中的某一項超過使用者自定義的門檻值,腳本會自動發送一封電子郵件,其中包含目前程序清單内容。
電子郵件的主題行如下所示:
下面我們一一解釋其中的條目:
L代表一分鐘平均負載
P代表目前程序清單中的程序數量
Swap Usage代表虛拟記憶體使用百分比
pps in代表每秒接收資料包數量
pps out代表每秒發出資料包數量
本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1792584,如需轉載請自行聯系原作者