我猜一定會有同學會說,平均負載不就是機關時間的 CPU 使用率嗎?上面 2.85,就代表 CPU 使用率是 285%。其實不是這樣的。
CPU 負載值在 Linux 系統中表示正在運作,處于可運作狀态的平均作業數(讀取一組與流程執行線程對應的機器語言的程式指令),或者非常重要,休眠但不可中斷(不可交錯的休眠狀态))。也就是說,要計算 CPU 負載的值,隻考慮正在運作或等待配置設定 CPU 時間的程序。不考慮正常的休眠過程(休眠狀态),僵屍或停止的過程。
簡單來說,平均負載是指機關時間内,系統處于可運作狀态和不可中斷狀态的平均程序數,也就是平均活躍程序數,它和 CPU 使用率并沒有直接關系。
程序狀态代碼 R 正在運作或可運作(在運作隊列中) D 不間斷休眠(通常為IO) S 可中斷休眠(等待事件完成) Z 失效/僵屍,終止但未被其父 T 停止,由作業控制停止信号或因為它被追蹤 [...]
性能基礎之了解Linux系統平均負載和CPU使用率
這裡先解釋下,可運作狀态和不可中斷狀态。
可運作狀态的程序,指的是正在使用CPU或者正在等待CPU的程序,也就是我們常用 ps 指令看到處于 R 狀态(Running 或 Runnable)的程序。
不可中斷狀态的程序,指的是正處于核心态關鍵流程中的程序,并且這些流程是不可打斷的,比如常見是等待硬體裝置的 I/O 響應。也就是我們在Ps 指令看到的D狀态(Uninterruptible Sleep,也稱為 Disk Sleep)的程序。 比如,當一個程序向磁盤讀寫資料時,為了保證資料的一緻性,在得到磁盤回複前,它是不能被其他程序或者中斷打斷的,這個時間的程序就處于不可中斷狀态。如果此時的程序被打斷,就容易出現磁盤資料與程序資料不一緻的問題。
舉個例子,如果你的計算機裝了 2 個 CPU,會發生什麼情況呢? 2 個 CPU,意味着計算機的處理能力翻了一倍,能夠同時處理的程序數量也翻了一倍。 還是用大橋來類比,兩個 CPU 就意味着大橋有兩根車道了,通車能力翻倍了
性能基礎之了解Linux系統平均負載和CPU使用率
是以,2 個CPU表明系統負載可以達到 2.0,此時每個 CPU 都達到 100%的工作量。推廣開來,n 個 CPU 的計算機,可接受的系統負載最大為n.0。
晶片廠商往往在一個 CPU 内部,包含多個CPU核心,這被稱為多核CPU。
在系統負載方面,多核 CPU 與多 CPU 效果類似,是以考慮系統負載的時候,必須考慮這台計算機有幾個 CPU、每個 CPU 有幾個核心。然後,把系統負荷除以總的核心數,隻要每個核心的負荷不超過 1.0,就表明計算機正常運作。 怎麼知道PC有多少個 CPU 核心呢?
如果我們觀察在給定時間間隔内通過 CPU 的不同程序,則使用率百分比将表示相對于 CPU 執行與每個程序相對應的指令的那個時間間隔的時間部分。但這種計算隻運作的程序,而不是那些正在等待,無論它們是在隊列(可運作狀态)還是休眠但不可中斷(例如在等待輸入/輸出操作的結束)被認為。 是以,這個名額可以讓我們了解哪些程序最大程度地擠壓 CPU,但是如果系統狀态過載或者未充分利用,則不能給出真實的系統狀态圖。
現實工作中,我們經常容易把平均負載和 CPU 使用率混淆,從上面我們知道平均負載是指機關時間内,處于可運作狀态和不可中斷狀态的程序數。是以,它不僅包括正在使用 CPU 的程序,還包括等待 CPU 和等待I/O 的程序。而 CPU使用率,從上面的解釋我們知道是機關時間内繁忙程度,跟平均負載并不一定完全對應。比如: