Linux學習 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負載率的計算方式理解