怎麽理解“平均負載”? 進行分析等
每次發現系統變慢時,我們通常做的第一件事,就是執行 top 或者 uptime 命令,來了解系統的負載情況。比如像下面這樣,我在命令行裏輸入了 uptime 命令,系統也隨即給出了結果。
[root@localhost ~]# uptime
15:34:11 up 140 days, 1:23, 6 users, load average: 0.03, 0.09, 2.75
以上命令說明
02:34:03 // 當前時間 up 2 days, 20:14 // 系統運行時間 1 user // 正在登錄用戶數 load average: 0.03, 0.09, 2.75 而最後三個數字呢,依次則是過去1 分鐘、5 分鐘、15 分鐘的平均負載(Load Average)。
如何觀測和理解這個最常見、也是最重要的系統指標。
一:什麽是平均負載
簡單來說,平均負載是指單位時間內,系統處於可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數,它和 CPU 使用率並沒有直接關系。這裏我先解釋下,可運行狀態和不可中斷狀態這倆詞兒。
二:可運行狀態
所謂可運行狀態的進程,是指正在使用 CPU 或者正在等待 CPU 的進程,也就是我們常用 ps 命令看到的,處於 R 狀態(Running 或 Runnable)的進程。
二:不可中斷狀態
不可中斷狀態的進程則是正處於內核態關鍵流程中的進程,並且這些流程是不可打斷的,比如最常見的是等待硬件設備的 I/O 響應,也就是我們在 ps 命令中看到的 D 狀態(Uninterruptible Sleep,也稱為 Disk Sleep)的進程。
舉個例子:
比如,當一個進程向磁盤讀寫數據時,為了保證數據的一致性,在得到磁盤回復前,它是不能被其他進程或者中斷打斷的,這個時候的進程就處於不可中斷狀態。如果此時的進程被打斷了,就容易出現磁盤數據與進程數據不一致的問題。
所以,不可中斷狀態實際上是系統對進程和硬件設備的一種保護機制
因此,你可以簡單理解為,平均負載其實就是平均活躍進程數。平均活躍進程數,直觀上的理解就是單位時間內的活躍進程數,但它實際上是活躍進程數的指數衰減平均值。這個“指數衰減平均”的詳細含義你不用計較,這只是系統的一種更快速的計算方式,你把它直接當成活躍進程數的平均值也沒問題。
怎麽理解“平均負載”? 進行分析等