1. 程式人生 > >Linux學習 CPU負載率的計算方式理解

Linux學習 CPU負載率的計算方式理解

Linux運維 Linux學習 Linux入門 Linux基礎 Linux雲計算

  Load average的概念源自UNIX系統,雖然各家的公式不盡相同,但都是用於衡量正在使用CPU的進行數量和正在等待CPU的進程數量,一句話就是runable processes的數量。所以Load average可以作為CPU瓶頸的參考指標,如果大於CPU的數量,說明CPU可能不夠用了。

  但是,在Linux上有點差異!

  Linux上的load average除了包括正在使用CPU的進程數量和正在等待CPU的進程數量之外,還包括uninterruptible sleep的進程數量。通常等待IO設備、等待網絡的時候,進程會處於uninterruptible sleep狀態。Linux設計者的邏輯是,uninterruptible sleep應該都是很短暫的,很快就會恢復運行,所以被等同於runnable。然而uninterruptible sleep即使再短暫也是sleep,何況現實世界中uninterruptible sleep未必很短暫,大量的、或長時間的uninterruptible sleep通常意味著IO設備遇到了瓶頸。眾所周知,sleep狀態的進程是不需要CPU的,即使所有的CPU都空閑,正在sleep的進程也是運行不了的,所以sleep進程的數量絕對不適合用作衡量CPU負載的指標,Linux把uninterruptible sleep進程算進load average的做法直接顛覆了load average的本來意義。所以在Linux系統上,load average這個指標基本失去了作用,因為你不知道它代表什麽意思,當看到load average很高的時候,你不知道是runnable進程太多還是uninterruptible sleep進程太多,也就無法判斷是CPU不夠用還是IO設備有瓶頸。

  從另一個方面來說,也就可以解釋為什麽磁盤慢時(大量磁盤使用時),CPU負載會飆高了。基本上我碰到CPU負載高的情況就兩種情況:CPU本身處理太多任務,再加上軟中斷和上下文切換太頻繁導致負載高;再就是磁盤太慢導致了不可中斷睡眠太多導致CPU負載高。

  希望經過分享可以幫到有需要的盆友們。Linux如今深受互聯網企業的喜愛,想要眾多的IT工作者中脫穎而出,就需要擁有高深的技術,學習增值是必不可少的。學習之路,是貴在堅持的。老男孩教育Linux雲計算運維課程,10年技術沈澱,杜絕紙上談兵,全企業真實案例結合理論授課,想深入的學習Linux雲計算運維的知識,可以關註下老男孩教育。


Linux學習 CPU負載率的計算方式理解