使用stress進行壓力測試


本文轉載自使用stress進行壓力測試

導語

stress,顧名思義是一款壓力測試工具。你可以用它來對系統CPU,內存,以及磁盤IO生成負載。

安裝stress

幾乎所有主流的linux發行版的軟件倉庫中都收錄有stress,可以直接使用包管理起來安裝

sudo pacman -S stress --noconfirm

使用stress

直接運行 stress 就會列出關於 stress 的簡單說明

stress
`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
 -?, --help         show this help statement
     --version      show version statement
 -v, --verbose      be verbose
 -q, --quiet        be quiet
 -n, --dry-run      show what would have been done
 -t, --timeout N    timeout after N seconds
     --backoff N    wait factor of N microseconds before work starts
 -c, --cpu N        spawn N workers spinning on sqrt()
 -i, --io N         spawn N workers spinning on sync()
 -m, --vm N         spawn N workers spinning on malloc()/free()
     --vm-bytes B   malloc B bytes per vm worker (default is 256MB)
     --vm-stride B  touch a byte every B bytes (default is 4096)
     --vm-hang N    sleep N secs before free (default none, 0 is inf)
     --vm-keep      redirty memory instead of freeing and reallocating
 -d, --hdd N        spawn N workers spinning on write()/unlink()
     --hdd-bytes B  write B bytes per hdd worker (default is 1GB)

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

對CPU進行壓力測試

使用 stress -c N 會讓stress生成N個工作進程進行開方運算,以此對CPU產生負載。

比如你的CPU有四個核,那么可以運行

stress -c 4

這是查看stress進程信息

ps -elf |grep stress |grep -v grep
0 S lujun99+ 17738  1501  0  80   0 -  1996 -      23:06 pts/0    00:00:00 stress -c 4
1 R lujun99+ 17739 17738 95  80   0 -  1996 -      23:06 pts/0    00:01:17 stress -c 4
1 R lujun99+ 17740 17738 93  80   0 -  1996 -      23:06 pts/0    00:01:16 stress -c 4
1 R lujun99+ 17741 17738 94  80   0 -  1996 -      23:06 pts/0    00:01:17 stress -c 4
1 R lujun99+ 17742 17738 94  80   0 -  1996 -      23:06 pts/0    00:01:17 stress -c 4

你會發現一共有5個stress進程,其中有4個進程是 17738 進程派生出來的工作進程。而且每個工作進程占用的CPU利用率都接近100%

對內存進行壓力測試

類似的,使用 stress -m N 會讓stress生成N個工作進程來占用內存。每個進程默認占用256M內存,但可以通過 --vm-bytes 來進行設置。 例如

stress -m 3 --vm-bytes 300M

會生成3個進程,每個進程占用300M內存

ps -elf |grep stress |grep -v grep
0 S lujun99+ 18700  1501  0  80   0 -  1996 -      23:26 pts/0    00:00:00 stress -m 3 --vm-bytes 300M
1 R lujun99+ 18701 18700 99  80   0 - 78797 -      23:26 pts/0    00:02:10 stress -m 3 --vm-bytes 300M
1 R lujun99+ 18702 18700 99  80   0 - 78797 -      23:26 pts/0    00:02:10 stress -m 3 --vm-bytes 300M
1 R lujun99+ 18703 18700 99  80   0 - 78797 -      23:26 pts/0    00:02:09 stress -m 3 --vm-bytes 300M

而且你會發現,雖然只是對內存進行壓力測試,但實際上CPU也是很繁忙的,占有率也接近100%

對磁盤進行壓力測試

對磁盤壓力測試有兩個參數:

stress -i N 會產生N個進程,每個進程反復調用sync()將內存上的內容寫到硬盤上.

stress -d N 會產生N個進程,每個進程往當前目錄中寫入固定大小的臨時文件,然后執行unlink操作刪除該臨時文件。 臨時文件的大小默認為1G,但可以通過 --hdd-bytes 設置臨時文件的大小。比如

stress -i 2 -d 4 --hdd-bytes 512M

你會發現壓力測試時,當前目錄所在可用空間少了2G,如下所示:

[lujun9972@T430S ~]$ df -h .
\文件系統        容量  已用  可用 已用% 掛載點
/dev/sdb1       466G  255G  211G   55% /home
[lujun9972@T430S ~]$ stress -i 2 -d 4 --hdd-bytes 512M &
[1] 20101
[lujun9972@T430S ~]$ stress: info: [20101] dispatching hogs: 0 cpu, 2 io, 0 vm, 4 hdd
[lujun9972@T430S ~]$ df -h .
文件系統        容量  已用  可用 已用% 掛載點
/dev/sdb1       466G  257G  209G   56% /home

同時對多項指標進行壓力測試

stress支持同時對多個指標進行壓力測試,只需要把上面的參數組合起來就行

stress -c 4 -m 2 -d 1

這個時候你再看stress進程

ps -elf |grep stress |grep -v grep
0 S lujun99+ 19048  1501  0  80   0 -  1996 -      23:36 pts/0    00:00:00 stress -c 4 -m 2 -d 1
1 R lujun99+ 19049 19048 56  80   0 -  1996 -      23:36 pts/0    00:00:25 stress -c 4 -m 2 -d 1
1 R lujun99+ 19050 19048 55  80   0 - 67533 -      23:36 pts/0    00:00:25 stress -c 4 -m 2 -d 1
1 D lujun99+ 19051 19048 28  80   0 -  2221 -      23:36 pts/0    00:00:12 stress -c 4 -m 2 -d 1
1 R lujun99+ 19052 19048 58  80   0 -  1996 -      23:36 pts/0    00:00:26 stress -c 4 -m 2 -d 1
1 R lujun99+ 19053 19048 56  80   0 - 67533 -      23:36 pts/0    00:00:25 stress -c 4 -m 2 -d 1
1 R lujun99+ 19054 19048 57  80   0 -  1996 -      23:36 pts/0    00:00:25 stress -c 4 -m 2 -d 1
1 R lujun99+ 19055 19048 58  80   0 -  1996 -      23:36 pts/0    00:00:26 stress -c 4 -m 2 -d 1

你會發現工作進程一共有7個,也就是說每個進程只負責一項測試。

設置超時時間

通過 -t TIMEOUT 可以讓stress只運行一段時間后自動退出。這一般在寫腳本的時候會用到。

比如我想要運行上面的測試,但是10秒后自動退出,那么

stress -c 4 -m 2 -d 1 -t 10s
stress: info: [19302] dispatching hogs: 4 cpu, 0 io, 2 vm, 1 hdd
stress: info: [19302] successful run completed in 11s


免責聲明!

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



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