天天看點

linux系統做壓力測試,Linux系統壓力測試工具stress

linux系統下,可以使用stress 指令主要用來模拟系統負載較高時的場景,本文介紹其基本用法。文中 demo 的示範環境為 ubuntu 18.04。

基本文法

文法格式:

stress

常用選項:

-c, --cpu N              産生 N 個程序,每個程序都反複不停的計算随機數的平方根

-i, --io N                  産生 N 個程序,每個程序反複調用 sync() 将記憶體上的内容寫到硬碟上

-m, --vm N             産生 N 個程序,每個程序不斷配置設定和釋放記憶體

--vm-bytes B      指定配置設定記憶體的大小

--vm-stride B     不斷的給部分記憶體指派,讓 COW(Copy On Write)發生

--vm-hang N      訓示每個消耗記憶體的程序在配置設定到記憶體後轉入睡眠狀态 N 秒,然後釋放記憶體,一直重複執行這個過程

--vm-keep          一直占用記憶體,差別于不斷的釋放和重新配置設定(預設是不斷釋放并重新配置設定記憶體)

-d, --hadd N           産生 N 個不斷執行 write 和 unlink 函數的程序(建立檔案,寫入内容,删除檔案)

--hadd-bytes B  指定檔案大小

-t, --timeout N       在 N 秒後結束程式

--backoff N            等待N微妙後開始運作

-q, --quiet              程式在運作的過程中不輸出資訊

-n, --dry-run          輸出程式會做什麼而并不實際執行相關的操作

--version                顯示版本号

-v, --verbose          顯示詳細的資訊

安裝 stress

Ubuntu 系統預設沒有安裝 stress,需要通過下面的指令安裝:

$ sudo apt install stress

$ stress --version

linux系統做壓力測試,Linux系統壓力測試工具stress

消耗 CPU 資源

stress 消耗 CPU 資源的方式是通過調用 sqrt 函數計算由 rand 函數産生的随機數的平方根實作的。下面的指令會産生 4 個這樣的程序不斷的進行計算:

$ stress -c 4

linux系統做壓力測試,Linux系統壓力測試工具stress

使用 top 指令檢視 CPU 的狀态如下(CPU 在使用者态滿負荷運轉):

linux系統做壓力測試,Linux系統壓力測試工具stress

消耗記憶體資源

下面的指令産生兩個子程序,每個程序配置設定 300M 記憶體:

$ stress --vm 2 --vm-bytes 300M --vm-keep

linux系統做壓力測試,Linux系統壓力測試工具stress

父程序處于睡眠狀态,兩個子程序負責資源消耗。

--vm-keep

一直占用記憶體,差別于不斷的釋放和重新配置設定(預設是不斷釋放并重新配置設定記憶體)。

--vm-hang N

訓示每個消耗記憶體的程序在配置設定到記憶體後轉入睡眠狀态 N 秒,然後釋放記憶體,一直重複執行這個過程。

--vm-keep 和 --vm-hang 都可以用來模拟隻有少量記憶體的機器,但是指定它們時 CPU 的使用情況是不一樣的。

$ stress --vm 2 --vm-bytes 500M --vm-keep

linux系統做壓力測試,Linux系統壓力測試工具stress

一直在進行預設的 stride 操作,user 非常高(cpu 在使用者态忙碌)。

$ stress --vm 2 --vm-bytes 500M --vm-hang 5

linux系統做壓力測試,Linux系統壓力測試工具stress

上面這兩種狀态不斷切換,但整體上看 CPU 的負載并不高。

--vm-stride B

不斷的給部分記憶體指派,讓 COW(Copy On Write)發生。隻要指定了記憶體相關的選項,這個操作就會執行,隻是大小為預設的 4096。指派記憶體的比例由參數決定:

for (i = 0; i < bytes; i += stride)

ptr[i] = 'Z';

bytes 為消耗的總記憶體大小,stride 為間隔。

該參數會影響 CPU 狀态 us 和 sy:

$ stress --vm 2 --vm-bytes 500M --vm-stride 64

linux系統做壓力測試,Linux系統壓力測試工具stress

$ stress --vm 2 --vm-bytes 500M --vm-stride 1M

linux系統做壓力測試,Linux系統壓力測試工具stress

為什麼會産生這樣的結果?原因是單獨的指派和對比操作可以讓 CPU 在使用者态的負載占到 99% 以上。--vm-stride 值增大就意味着減少指派和對比操作,這樣就增加了記憶體的釋放和配置設定次數(cpu在核心空間的負載)。

不指定 --vm-stride 選項就使用預設值是 4096,CPU 負載情況居于前兩者之間:

$ stress --vm 2 --vm-bytes 500M

linux系統做壓力測試,Linux系統壓力測試工具stress

消耗 IO 資源

下面的指令産生 4 個程序,每個程序都反複調用 sync 函數将記憶體上的内容寫到硬碟上:

$ stress -i 4

linux系統做壓力測試,Linux系統壓力測試工具stress

使用 top 指令檢視 CPU 的狀态如下:

linux系統做壓力測試,Linux系統壓力測試工具stress

sy 升高,wa(iowait) 非常高。

壓測磁盤及 IO

下面的指令建立一個程序不斷的在磁盤上建立 10M 大小的檔案并寫入内容:

$ stress -d 1 --hdd-bytes 10M

linux系統做壓力測試,Linux系統壓力測試工具stress

使用 top 指令檢視 CPU 的狀态如下(此時的 CPU 主要消耗在核心态):

linux系統做壓力測試,Linux系統壓力測試工具stress

下面是 iostat 2 的輸出(同樣是高 iowait,瓶頸是寫磁盤):

linux系統做壓力測試,Linux系統壓力測試工具stress

其它選項介紹

--verbose

顯示 stress 程式運作過程中的詳細資訊:

linux系統做壓力測試,Linux系統壓力測試工具stress

--timeout N

在 N 秒後結束程式。

--quiet

stress 程式運作的過程中不輸出資訊。

-n, --dry-run

輸出程式會做什麼而并不實際執行相關的操作:

linux系統做壓力測試,Linux系統壓力測試工具stress

--backoff N

讓新 fork 出來的程序 sleep N 微秒再開始運作。

除了單獨指定某一類的選項,還可以同時執行多個類型的任務,比如産生 3 個 CPU 程序、3 個 IO 程序、2 個10M 的 vm 程序,并且每個 vm 程序中不循環配置設定釋放記憶體:

$ stress --cpu 3 --io 3 --vm 2 --vm-bytes 10M --vm-keep

總結

對于學習 Linux 性能檢測相關的指令來說,stress 指令是個得力的助手。通過模拟各種高負載情況,可以幫助我們更好的了解系統瓶頸并掌握性能檢測工具的用法。

sparkdev

出處:http://www.cnblogs.com/sparkdev/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

标簽:stress,bytes,vm,程序,記憶體,Linux,測試工具,CPU

來源: https://www.cnblogs.com/jiftle/p/12904248.html