【Linux性能優化2】平均負載

什麼是平均負載

當系統響應變慢時,一般使用top或者uptime來查看系統負載情況。運行uptime命令的輸出信息如下:
在這裏插入圖片描述
其中 23:12:21 爲當前系統時間
up 42 min:爲系統已經運行的時間
2 users:當前登錄的用戶數
load average:則是過去 1 分鐘、5 分鐘、15 分鐘的平均負載。
***平均負載***是單位時間內系統處於可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍的進程數。
可運行狀態是指正在使用cpu或者正在等待cpu的進程。也就是使用ps命令看到的處於R狀態的進程。
不可中斷狀態的進程則是處於內核態關鍵流程中的進程,且這些進程是不可以被打斷的,比如常見的等待硬件設備的IO響應。也就是使用ps命令處於D狀態的進程。不可中斷狀態是系統對進程和硬件設備的一種保護機制。
平均活躍進程數最理想的狀態就是每個CPU上剛好運行一個進程,這樣每個CPU都得到了充分的利用,也就是說平局負載剛好等於系統CPU的個數。
如果平均負載爲2意味着什麼呢?
也就是單位時間平均活躍進程數爲2.那麼對於只有2個CPU的系統來說,CPU剛好被得到了充分的利用。
而在有4個CPU的系統上,有50%的CPU會處於空閒狀態。
而在只有一個CPU的系統上 則進程需要競爭CPU才能被運行 會有50%的進程因爲競爭不到CPU而處於等待狀態。

如何查看系統有幾個CPU:

在這裏插入圖片描述
上面的命令顯示 系統cpu數目爲2

平均負載與CPU使用率

平均負載代表代表的是平均活躍進程數,是不是平均負載升高了CPU使用率就高了呢?
首先平均負載是單位時間內系統處於可運行狀態和不可中斷狀態的平均進程數,它不僅包括了正在使用CPU的進程,還包括了等待CPU和等待I/O的進程。CPU使用率則是單位時間內CPU的繁忙情況統計,跟平均負載不一定對應

分析工具

tress 是一個 Linux 系統壓力測試工具,可以用於模擬異常的平均負載升高的情況
sysstat包含了linux性能分析的常用工具用於監控和分析系統性能,其中就包含了mpstat和pidstat兩個命令。
mpstat 是一個常用的多核 CPU 性能分析工具,用來實時查看每個cpu的性能指標以及每個CPU的平均指標
pidstat是一個常用的進程性能分析工具 用來實時查看cpu 內存 io以及上下文切換等性能指標。
場景1 CPU密集型進程
在終端1中運行下面的命令 stress –cpu 1 –timeout 600 模擬cpu使用率100%的場景

在這裏插入圖片描述
在終端2中繼續運行下面的命令:watch –d uptime
大概1-2分鐘以後平均負載逐漸上升到1

在這裏插入圖片描述
然後在在新的終端中執行給下面的命令 mpstat –P ALL 5
會發現其中一個進程的cpu idle佔比接近0% %user則接近100%
在這裏插入圖片描述

mpstat並不能給出具體是哪個進程佔用了CPU 需要使用pidstat命令,繼續運行下面的命令 pidstat -u 5 1
會發現 進程stress的CPU使用率已經達到了100%
在這裏插入圖片描述

場景2 大量進程的場景
運行測試命令前的平均負載狀況:
在這裏插入圖片描述
然後在第二個中端運行測試命令:stress –c 8 –timeout 600
這裏的-c選項是產生n個進程 每個進程都反覆不停的計算隨機數的平方根

在這裏插入圖片描述
在這裏插入圖片描述

再來觀察平均負載情況 發現平均負載很快就上升到了7.63 平均負載已經嚴重超標
運行pidstat命令來查看每個進程的運行情況如下:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

無論是pidstat的輸出還是top命令的輸出都顯示,8個進程在爭搶2個CPU,每個進程導致的CPU使用都達到了25%左右。

小結

平均負載提供了一個快速查看系統整體性能的手段,反應了系統的整體負載情況。理解平均負載需要注意:

1) 平均負載高有可能是CPU密集型進程導致的
2) 平均負載升高,CPU使用率不一定升高,有可能是I/O更繁忙了
3) 當平均負載升高時可以使用mpstat、pidstat命令來輔助分析系統性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章