uptime
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ uptime10:27:10 up 7 min, 1 user, load average: 1.32, 0.99, 0.49
結果分別對應:當前時間、系統運行時間、當前用戶數目、過去 1 分鐘、5 分鐘、15 分鐘的平均負載(Load
Average)
平均負載是指單位時間內,系統處于可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數,和 CPU使用率沒有直接關系。
可運行狀態進程:正在使用CPU或者正在等待CPU的進程;即ps命令看到的,處于R狀態的進程
不可中斷狀態進程:正處于內核態關鍵流程中的進程,并且這些流程是不可打斷的,比如等待硬件設備的I/O響應,即ps命令中看到的D狀態的進程。
不可中斷狀態實際上是系統對進程和硬件設備的一種保護機制。
下面語句可以得到CPU個數,一般來說,平均負載大于CPU的0.7倍時就需要注意了,大于CPU個數的話就會出現過載。
grep 'model name' /proc/cpuinfo | wc -l
8
通過對于平均負載的定義可以看出,它不僅包括了正在使用CPU的進程,還包括等待CPU和等待IO的進程。
CPU使用率與平均負載的關系:
CPU密集型進程,使用大量CPU會導致平均負載升高,兩者一致。
I/O密集型進程,等待I/O也會導致平均負載升高,但CPU使用率不一定很高。
大量等待CPU的進程調度也會導致平均負載升高,此時的CPU使用率也會比較高。
接下來是實測:
CPU 密集型進程
stress 是一個 Linux 系統壓力測試工具,我們在終端1運行該工具。
在終端2,不斷運行uptime,可以發現平均負載在不斷上升。
mpstat 是一個常用的多核 CPU 性能分析工具,用來實時查看每個 CPU 的性能指標,以
及所有 CPU 的平均指標,我們在終端3運行它。可以發現有一個核的使用率為100%,但是iowait為0.
通過運行# pidstat -u 5 1
,可以看到是運行stress的進程占用率為100%
IO密集型進程
stress 命令,但這次模擬 I/O 壓力,即不停地執行 sync,下面是顯示效果,可以發現iowait很高,導致了平均負載很高。
大量進程場景
由于機子有8個核,我開12個進程用作運行stress,這樣CPU處于過載狀態,10.92明顯是比8大的,再用pidstat可以看出
個進程等待 CPU 的時間(也就是代碼塊中的%wait 列)高達 60~75%,這里就是上圖的倒數第二列顯示。