1. 程式人生 > >linux之load average分析

linux之load average分析

load average :平均負載情況

把原文翻譯了一下:

自己的機器的負載情況

load average 0.13,0.37,0.41 

       很多人會這樣理解負載均值:三個數分別代表不同時間段的系統平均負載(一分鐘、五 分鐘、以及十五分鐘),它們的數字當然是越小越好。數字越高,說明伺服器的負載越 大,這也可能是伺服器出現某種問題的訊號。

“所以你說的理想負荷為 1.00 ?”

嗯,這種情況其實並不完全正確。負荷 1.00 說明系統已經沒有剩餘的資源了。在實際情況中 ,有經驗的系統管理員都會將這條線劃在 0.70:

“需要進行調查法則”: 如果長期你的系統負載在 0.70 上下,那麼你需要在事情變得更糟糕之前,花些時間瞭解其原因。

“現在就要修復法則”:1.00 。 如果你的伺服器系統負載長期徘徊於 1.00,那麼就應該馬上解決這個問題。否則,你將半夜接到你上司的電話,這可不是件令人愉快的事情。

“凌晨三點半鍛鍊身體法則”:5.00。 如果你的伺服器負載超過了 5.00 這個數字,那麼你將失去你的睡眠,還得在會議中說明這情況發生的原因,總之千萬不要讓它發生。

那麼多個處理器呢?我的均值是 3.00,但是系統執行正常!

哇喔,你有四個處理器的主機?那麼它的負載均值在 3.00 是很正常的。

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

回到我們上面有關車輛過橋的比喻。1.00 我說過是“一條單車道的道路”。那麼在單車道 1.00 情況中,說明這橋樑已經被車塞滿了。而在雙處理器系統中,這意味著多出了一倍的 負載,也就是說還有 50% 的剩餘系統資源 — 因為還有另外條車道可以通行。

所以,單處理器已經在負載的情況下,雙處理器的負載滿額的情況是 2.00,它還有一倍的資源可以利用。

[NextPage]

多核與多處理器

先脫離下主題,我們來討論下多核心處理器與多處理器的區別。從效能的角度上理解,一臺主 機擁有多核心的處理器與另臺擁有同樣數目的處理效能基本上可以認為是相差無幾。當然實際 情況會複雜得多,不同數量的快取、處理器的頻率等因素都可能造成效能的差異。

但即便這些因素造成的實際效能稍有不同,其實系統還是以處理器的核心數量計算負載均值 。這使我們有了兩個新的法則:

“有多少核心即為有多少負荷”法則: 在多核處理中,你的系統均值不應該高於處理器核心的總數量。

“核心的核心”法則: 核心分佈在分別幾個單個物理處理中並不重要,其實兩顆四核的處理器 等於 四個雙核處理器 等於 八個單處理器。所以,它應該有八個處理器核心。

檢視系統裝備了多少核心的處理器,用cat /proce/cupinfo 

load值如果高的話可以用排除法:vmstat命令

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  0  0      0 3416804 368388 1993240    0    0     1    14    1    1  3  0 96  0  0

  r 列表示執行和等待cpu時間片的程序數,如果長期大於1,說明cpu不足,需要增加cpu。

b 列表示在等待資源的程序數,比如正在等待I/O、或者記憶體交換等。

cpu 表示cpu的使用狀態

us 列顯示了使用者方式下所花費 CPU 時間的百分比。us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期大於50%,需要考慮優化使用者的程式。

sy 列顯示了核心程序所花費的cpu時間的百分比。這裡us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。

wa 列顯示了IO等待所佔用的CPU時間的百分比。這裡wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁碟大量隨機訪問造成的,也可能磁碟或者磁碟訪問控制器的頻寬瓶頸造成的(主要是塊操作)。

id 列顯示了cpu處在空閒狀態的時間百分比

system 顯示採集間隔內發生的中斷數

in 列表示在某一時間間隔中觀測到的每秒裝置中斷數。

cs列表示每秒產生的上下文切換次數,如當 cs 比磁碟 I/O 和網路資訊包速率高得多,都應進行進一步調查。

memory

swpd 切換到記憶體交換區的記憶體數量(k表示)。如果swpd的值不為0,或者比較大,比如超過了100m,只要si、so的值長期為0,系統性能還是正常

free 當前的空閒頁面列表中記憶體數量(k表示)

buff 作為buffer cache的記憶體數量,一般對塊裝置的讀寫才需要緩衝。

cache: 作為page cache的記憶體數量,一般作為檔案系統的cache,如果cache較大,說明用到cache的檔案較多,如果此時IO中bi比較小,說明檔案系統效率比較好。

swap

si 由記憶體進入記憶體交換區數量。

so由記憶體交換區進入記憶體數量。

IO

bi 從塊裝置讀入資料的總量(讀磁碟)(每秒kb)。

bo 塊裝置寫入資料的總量(寫磁碟)(每秒kb)

這裡我們設定的bi+bo參考值為1000,如果超過1000,而且wa值較大應該考慮均衡磁碟負載,可以結合iostat輸出來分析。