一,安装stress:

说明:el8的源里面还没有,先用el7的rpm包

[root@centos8 source]# wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/stress-1.0.4-16.el7.x86_64.rpm
[root@centos8 source]# rpm -ivh stress-1.0.4-16.el7.x86_64.rpm

 


二,stress的用途:

stress 命令主要用来模拟系统负载较高时的场景,

可以对cpu、memory、IO以及磁盘进行压力测试

 

三,查看stress的版本和帮助

1,查看版本

[root@centos8 source]# stress --version
stress 1.0.4

 

2,查看帮助:

[root@centos8 source]# stress --help
`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)

 

四,stress命令的参数说明:

-c --cpu 产生n个进程 每个进程都反复不停的计算随机数的平方根

-i --io  产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上

-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数

   --vm-bytes B 指定malloc时内存的字节数 (默认256MB)

   --vm-hang N 指示每个消耗内存的进程在分配到内存后转入休眠状态,与正常的无限分配和释放内存的处理相反,这有利于模拟只有少量内存的机器

-d --hadd n 产生n个执行write和unlink函数的进程

--hadd-bytes B 指定写的字节数,默认是1GB

--hadd-noclean 不要将写入随机ASCII数据的文件Unlink

-t, --timeout N    持续指定的N秒后退出

 

五,stress的使用例子:cpu

1,在容器内执行stress,创建四个消耗 CPU 资源的进程

[root@centos8 ~]# stress -c 4 --timeout 600
stress: info: [3868] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd

 

2,用pidstat查看cpu的使用数据

# 显示所有CPU的指标,并在间隔5秒输出一组数据

[root@centos8 ~]# pidstat -p ALL 5 
平均时间:   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
平均时间:     0      3869   48.76    0.00    0.00   50.65   48.76     -  stress
平均时间:     0      3870   46.87    0.10    0.00   52.54   46.97     -  stress
平均时间:     0      3871   47.36    0.00    0.00   51.84   47.36     -  stress
平均时间:     0      3872   48.16    0.00    0.00   51.44   48.16     -  stress

说明:可以明显看到,stress 进程的 CPU 使用率很高

 

六,stress的使用例子:内存

1,启动2个消耗内存的进程,每个进程占用200M内存

[root@centos8 ~]# stress -m 2 --vm-bytes 200M
stress: info: [4364] dispatching hogs: 0 cpu, 0 io, 2 vm, 0 hdd

 

2,用pidstat 查看内存的占用情况

[root@centos8 ~]# pidstat -r | grep stress
13时32分48秒   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
13时33分38秒     0      4364      0.04      0.00    7948    1044   0.03  stress
13时33分38秒     0      4365   8748.16      0.00  212752   56072   1.46  stress
13时33分38秒     0      4366   9156.42      0.00  212752   91712   2.38  stress

 

七,stress的使用例子:硬盘

1, stress -d N 会产生N个进程:

每个进程往当前目录中写入固定大小的临时文件,然后执行unlink操作删除该临时文件。

临时文件的大小默认为1G,但可以通过 --hdd-bytes 设置临时文件的大小。

 

[root@centos8 ~]# stress -d 2 
stress: info: [4523] dispatching hogs: 0 cpu, 0 io, 0 vm, 2 hdd

 

2,用pidstat监控磁盘,可以看到两个stress进程在做大量的写入

[root@centos8 ~]# pidstat -d
Linux 4.18.0-147.5.1.el8_1.x86_64 (centos8) 2020年04月03日 _x86_64_ (2 CPU)

13时43分47秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
13时43分47秒     0      4524      0.00    166.98      0.00       0  stress
13时43分47秒     0      4525      0.00    165.31      0.00       0  stress

 

3,用iostat查看,也可以看到 kB_wrtn/s 的数值增长

[root@centos8 ~]# iostat
Linux 4.18.0-147.5.1.el8_1.x86_64 (centos8) 2020年04月03日 _x86_64_ (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.40    0.02    3.14    1.25    0.00   89.19

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              11.34       273.05      5296.74     863387   16748451
scd0              0.01         0.34         0.00       1060          0
dm-0             11.14       252.57      5296.85     798627   16748789
dm-1              0.17         0.75         0.51       2376       1616
dm-2              0.24         7.82         1.71      24714       5422

 

八,stress的使用例子:io

1,使用4个进程生成大量io, 即执行:sync()操作

[root@centos8 source]# stress -i 4

 

2,使用top可以看到stress的4个进程占用了大量的cpu资源

[root@centos8 conf]# top
...
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                
  9143 root      20   0    7948     96      0 R  54.5   0.0   0:20.52 stress                 
  9142 root      20   0    7948     96      0 R  53.8   0.0   0:20.88 stress                 
  9141 root      20   0    7948     96      0 R  52.5   0.0   0:20.31 stress                  
  9144 root      20   0    7948     96      0 R  52.2   0.0   0:20.65 stress

 

3,用pidstat查看进程,能看到stress的4个进程产生的大量的wait类的cpu使用

pidstat参数:间隔5秒后输出一组数据,-u表示CPU指标

[root@centos8 conf]# pidstat -u 5 1
Linux 4.18.0-147.5.1.el8_1.x86_64 (centos8) 2020年04月01日 _x86_64_ (2 CPU)

15时36分37秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
15时36分42秒     0      1064    0.20    0.00    0.00    6.72    0.20     1  vmtoolsd
15时36分42秒  1000      2704    1.19    0.00    0.00    0.99    1.19     0  gnome-shell
15时36分42秒     0      2889    0.20    0.00    0.00    0.20    0.20     0  sssd_kcm
15时36分42秒  1000      3279    0.20    0.00    0.00    1.98    0.20     0  gnome-terminal-
15时36分42秒     0      8992    0.00    0.20    0.00    2.57    0.20     0  kworker/0:0-events
15时36分42秒     0      9033    0.59   48.81    0.00   50.59   49.41     0  stress
15时36分42秒     0      9034    0.59   48.42    0.00   50.00   49.01     1  stress
15时36分42秒     0      9035    0.59   48.02    0.00   50.59   48.62     0  stress
15时36分42秒     0      9036    0.59   48.62    0.00   50.20   49.21     1  stress
15时36分42秒     0      9074    0.20    0.40    0.00    0.99    0.59     0  pidstat

平均时间:   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
平均时间:     0      1064    0.20    0.00    0.00    6.72    0.20     -  vmtoolsd
平均时间:  1000      2704    1.19    0.00    0.00    0.99    1.19     -  gnome-shell
平均时间:     0      2889    0.20    0.00    0.00    0.20    0.20     -  sssd_kcm
平均时间:  1000      3279    0.20    0.00    0.00    1.98    0.20     -  gnome-terminal-
平均时间:     0      8992    0.00    0.20    0.00    2.57    0.20     -  kworker/0:0-events
平均时间:     0      9033    0.59   48.81    0.00   50.59   49.41     -  stress
平均时间:     0      9034    0.59   48.42    0.00   50.00   49.01     -  stress
平均时间:     0      9035    0.59   48.02    0.00   50.59   48.62     -  stress
平均时间:     0      9036    0.59   48.62    0.00   50.20   49.21     -  stress
平均时间:     0      9074    0.20    0.40    0.00    0.99    0.59     -  pidstat

可以看到stress占用了cpu大量的wait类时间

 

九,查看centos的版本

[root@centos8 ~]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core)