linux 壓力測試 free top


1. 背景

每次發現系統變慢時,我們通常做的第一件事,就是執行 top 或者 uptime 命令,來了解系統的負載情況。如下所示我輸入uptime


image.png

我們會看到 load average: 0.00, 0.04, 0.05。這三個數字,依次則是過去 1 分鍾、5 分鍾、15 分鍾的平均負載(Load Average)

2. 平均負載

我之前理解為,過去1分鍾,5分鍾,15分鍾,cpu使用率。比如過去5分鍾為4%,cpu閑得蛋疼。這種理解其實是錯誤的,簡單來說,平均負載是指單位時間內,系統處於可運行狀態不可中斷狀態的平均進程數,也就是平均活躍進程數。

3. 可運行狀態和不可中斷狀態

可運行狀態的進程,是指正在使用 CPU 或者正在等待 CPU 的進程,也就是我們常用 ps 命令看到的,處於 R 狀態(Running 或 Runnable)的進程。
不可中斷狀態的進程則是正處於內核態關鍵流程中的進程,並且這些流程是不可打斷的,比如最常見的是等待硬件設備的 I/O 響應,也就是我們在 ps 命令中看到的 D 狀態(Uninterruptible Sleep,也稱為 Disk Sleep)的進程。

4. 平均負載多少合理

理想情況,一個cpu一個進程最合理,也就是4核cpu,平均負載為4的時候最合理。但是,通常我們會認為平均負載到了70%的時候,就應該觀察了。如果4核cpu,那么就是2.8的時候。
查看cpu核數:

grep 'model name' /proc/cpuinfo | wc -l

cpu使用率與cpu平均負載有什么關系呢,真相是沒有必然聯系。如果是cpu密集型工作,那兩者是一致的。如果是io密集型工作,那cpu使用率可能比較低,但是平均負載比較高。

5. 案例分析

准備:

  1. 安裝stress
    yum install epel-release
    yum install stress
    stress 是一個 Linux 系統壓力測試工具,這里我們用作異常進程模擬平均負載升高的場景

  2. 安裝 sysstat
    yum install sysstat
    sysstat 包含了常用的 Linux 性能工具,用來監控和分析系統的性能。我們的案例會用到這個包的兩個命令 mpstat 和 pidstat。
    mpstat 是一個常用的多核 CPU 性能分析工具,用來實時查看每個 CPU 的性能指標,以及所有 CPU 的平均指標。
    pidstat 是一個常用的進程性能分析工具,用來實時查看進程的 CPU、內存、I/O 以及上下文切換等性能指標。

案例一(cpu密集型)
開一個終端
stress --cpu 1 --timeout 600 #模擬一個cpu 100%
開第二個終端
uptime 多執行幾次,可以發現第一個數字會變成1

image.png

開第三個終端:
mpstat -P ALL 5 #-P ALL 代表所有cpu,5代表5秒輸出一次
image.png

可以看到cpu100%,沒有io等待
停止輸出,執行 pidstat -u 5 1 #表示5秒執行一次
image.png

可以看出是stress進程引起的

案例二(IO密集型)
開一個終端
stress -i 1 --timeout 600
其他的跟案例一一樣

案例三(大量進程搶占cpu)
開一個終端
stress -c 8 --timeout 600
其他跟案例一一樣

6. 總結

平均負載提供了一個快速查看系統整體性能的手段,反映了整體的負載情況。但只看平均負載本身,我們並不能直接發現,到底是哪里出現了瓶頸。所以,在理解平均負載時,也要注意:是否cpu的確繁忙,還是存在大量io等待,又或者是很多線程搶占cpu。需要根據mpstat和pidstat來分析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM