在linux操作系統中,我們一般查看系統的cpu負載情況常用的命令可以是uptime,top,還有vmstat等這些個都是可以有的。每個工具所提供的信息各不相同,
我這里要討論的僅說cpu部分。使用uptime命令,可以得到操作系統在過去1分鍾,5分鍾和15分鍾的cpu平均負載值,也就是傳說中的 load average,這個和top命令右上角那個地方顯示出來的東東是想通的,那么這個load average到底是個什么樣的東西呢,其實它表示的就是在cpu里面運行的進程數量,不過這里的進程和使用命令來查看到的進程可不太一樣。在一定時間內 cpu所能處理和承載的進程數量是有限的,這個數值與cpu的性能有直接關系,或者說這個數值標志着cpu的性能高低,反應到實際的計算機使用上來就是更 高性能的cpu可以在同一時間處理更多進程內容,所以說,一般當你去電腦城買個人電腦的時候導購就會問你電腦的大致用途,其實他們這個時候是在幫你計算你 所需要的電腦性能,其中就包括計算cpu的最大負載值,當然他們一般都不會這么去算,而是根據價格,因為價格高的cpu往往性能就更好,緊接着,他們會問 你大概的預算,其實當了解到你買電腦的用途之后他們自己心里已經幫你預算好了,如果你的預算高於他們的預算,那么恭喜那位賣電腦的,他可以多賺點了。所以 買電腦一定要根據實際需求,比如說cpu支持很高的負載,而你在實際使用中卻根本達不到那么高的負載,那不就成了殺雞用殺豬刀么。
扯遠了,說到底,cpu在單位時間內所能處理的進程數越高,那它的性能應該就越高。但是關於這個負載,網上資料有很多種說法,有的說是負載不應該超 過cpu的核心數量,有的說不應該超過cpu核心數量的2倍,有的說不應該超過cpu核心數量的3倍,為什么會有這么多種說法呢,其實大家都是擔心一個相 同的問題----怕cpu扛不住,這里超不超過幾倍不要緊,最主要的判斷標准是你的cpu在達到一定程度負載的時候是不是系統和應用程序依然運行良好,也 就是說判斷標准還與實際的應用有關,如果cpu的負載都超了核心數好幾倍但是軟件運行還依然順暢,那這個也是可以有的。這里就得說說cpu的運行隊列了, 有關運行隊列的狀態參數可以通過vmstat命令來查看,這里不多做解釋,它有兩項,一項是run,一項是blocked,也就是vmstat查看到的最 前面的兩排,run代表正在cpu里面執行的,blocked代表由於磁盤或其他方面的瓶頸導致他在cpu里面等待的,這兩個數值其實和使用uptime 或者top命令查看到的系統負載值是很有關系的,基本上,系統在某個時間的負載值就等同於run的值加上blocked的值,但是這里直接這樣用加法來表 示也是不對的,系統負載值是一個平均值,可以是小數,而運行隊列的數目是整數。在cpu處於空閑的情況下,run+blocked一般接近0,偶爾蹦出個 1啊2啊的,所以空閑狀態下的負載均值一般都是0.幾。
但是,當系統的負載逐漸升高,也就是說cpu里運行的東東逐漸變多,那么反應到負載均值上其數值也會跟着逐漸增大,而且可以是很大很大,完全超出 cpu核心數的好多倍,比如我前幾天用一台8核機器做測試的時候用top命令查看到的負載值居然達到了將近600,這已經遠遠超出了cpu可承受的范圍, 那為什么已經超出了可接受范圍這個負載均值還可以漲到那么高呢,這是因為在cpu里,同一時間可以運行的進程數量有限的,也就是說,vmstat查看到的 run值最大不能超過某個數,但是blocked卻可以繼續變大,因為進程已經blocked掉了,它幾乎占用不了多少cpu資源,而正在run的就不一 樣了,一個cpu同一時間能run多少完全取決於它的物理性能,所以當你的機器負載不斷升高,你用top命令查看到的負載值也會不斷升高,而當負載達到一 定高度時,cpu能處理的運行隊列也達到上限,run的值不再增加,這時,blocked的值會繼續增加,理論上,blocked可以一直增加到直到系統 崩潰。
總結:在評估cpu的性能優劣時完全照搬網上說的幾倍幾倍是不准確的,還得你自己動手看看vmstat顯示的run值和blocked值,當出現明 顯較多的blocked的時候,就說明cpu產生了瓶頸。而top命令和uptime命令顯示的負載均值,只能作為判斷系統過去某個時間段的狀態的參照, 與cpu的性能關系不大。
