使用Stress-ng在Linux/Unix上对CPU和内存(VM)进行压力测试

时间:2020-01-09 10:43:47  来源:igfitidea点击:

如何对我的Linux,OpenBSD,FreeBSD和类似Unix的服务器进行完全测试,以确保高负载并在压力下监视运行状况。如何在Linux或者类似Unix的系统上使用压力测试工具来缓解CPU,内存,I/O和磁盘的压力?系统管理员可以尝试使用以下任何一种工具,将给定的子系统置于指定的负载下。一个人可以在Linux其他子系统上对CPU进行压力测试。
有用的实例包括系统管理员希望执行调优活动,内核或者libc程序员希望评估拒绝服务的可能性,完全在高负载下测试系统并监视运行状况等实例。
这对于想要在高负载下测试其硬件并监视稳定性和热环境的系统管理员,系统构建者和超频者也很有用。

在Linux/Unix上对CPU和内存(VM)进行压力测试的工具

  • stress:这是用于POSIX系统的简单工作负载生成器。它在系统上施加了可配置数量的CPU,内存,I/O和磁盘压力。它是用C编写的,并且是根据GPLv2许可的免费软件。它不是一个基准测试,而是一个设计用于stress-ng的工具:它是Stress工具的更新版本,它将对服务器的以下功能进行压力测试:
  • 缓存颠簸
  • 驱动压力
  • I/O同步
  • 虚拟机压力
  • 承插应力
  • 上下文切换
  • 流程创建和终止
  • 它包括60多种不同的压力测试,50多种使用浮点,整数,位操作和控制流的CPU特定压力测试,以及20多种虚拟内存压力测试。

警告:建议以root权限运行以下工具,以避免内存不足和其他错误。
另外,请注意,工具会很快耗尽服务器资源,因此,请谨慎使用以下命令。

Linux上的压力工具入门

该程序应该易于使用,建议新系统管理员使用。
已知该工具可在x86 Linux和FreeBSD/OpenBSD,powerpc AIX和Linux,SPARC Solaris,Compaq Alpha Tru64 UNIX等平台上运行。

在Linux上安装压力包

您可以将压力安装为Linux或者Unix发行版的一部分。

在CentOS,RHEL和Fedora Linux上增加压力

首先,打开EPEL repo,然后执行以下yum命令进行安装:

sudo yum install stress

在Debian和Ubuntu Linux上增加压力

执行以下apt-get命令以进行安装:

apt-get install stress

输出示例:
在Debian/Ubuntu Linux上安装Stress工具

在FreeBSD Unix系统上增加压力

执行以下pkg命令以使用二进制方法安装压力工具:

pkg install stress
## 或者
pkg install sysutils/stress

输出示例:
FreeBSD安装压力工具

在OpenBSD Unix系统上增加压力

执行以下pkg_add命令以使用二进制方法安装压力工具:

## if installpath not set in  /etc/pkg.conf as follow ##
## installpath =   http://mirror.esc7.net/pub/OpenBSD/%c/packages/%a/ use ##
## PKG_PATH  ##
export PKG_PATH=http://ftp.usa.openbsd.org/pub/OpenBSD/`uname -r`/packages/`arch -s` 
pkg_add stress

如何在Linux上使用压力工具?

首先,通过执行以下命令记录当前的系统平均负载:

# uptime

接下来,运行以下任一命令以查看屏幕上的负载:

# watch uptime

或者使用tload命令:

# tload

语法如下:

stress [OPTION]
## Stress using CPU-bound task
stress -c 4
## Stress using IO-bound task 
stress -i 2

例如,通过指定两个CPU绑定进程,一个I/O绑定进程和一个内存分配器进程,对系统施加平均四个负载,如下所示:

# uptime
# stress -c 2 -i 1 -m 1 --vm-bytes 128M -t 10s
# uptime

输出示例:
平均负载为4

其中:

  • -c 2:生成两个在sqrt()上旋转的工人
  • -i 1:生成一个在sync()上旋转的工人
  • -m 1:产生一个在malloc()/free()上旋转的工人
  • --vm-bytes 128M:每个vm worker的Malloc 128MB(默认为256MB)
  • -t 10s:十秒后超时
  • -v:冗长

在Linux和Unix上使用Stress-ng入门

stress-ng工具将以各种可选方式对Linux计算机系统进行压力测试。

在Linux或者类似Unix的系统上安装Stress-ng

执行以下命令以使用wget命令下载Stress-ng tar包:

$ cd /tmp
$ wget http://kernel.ubuntu.com/~cking/tar包s/stress-ng/stress-ng-0.09.34.tar.xz

解压tar包,执行:

$ tar xvf stress-ng-0.09.34.tar.xz

编译stress-ng,运行:

$ cd stress-ng-0.09.34
$ make

输出示例:

make -f Makefile.config
make[1]: Entering directory '/tmp/stress-ng-0.09.34'
autoconfig: using -lcrypt
autoconfig: using pthread spinlock
autoconfig: using -lrt
autoconfig: using -lz
autoconfig: using -ldl
autoconfig: using -lpthread
autoconfig: using wchar.h
autoconfig: using grp.h
autoconfig: using sys/xattr.h
autoconfig: using sys/syscall.h
.....
...
.....
CC mwc.c
CC parse-opts.c
CC out-of-memory.c
CC net.c
CC sched.c
CC setting.c
CC thermal-zone.c
CC shim.c
CC perf.c
CC thrash.c
CC time.c
CC stress-ng.c
CC stress-personality.c
LD stress-ng
make[1]: Leaving directory '/tmp/stress-ng-0.09.34'

您也可以使用snap命令或者apt-get命令安装它:

$ sudo apt install stress-ng

如何在Linux上使用Stress-ng工具?

语法为:

stress-ng [options]
stress-ng -c 2
stress-ng -c 4 -t 10 -v
stress-ng -c 4 --metrics-brief

例子

启动它之前,请务必记下uptime命令的输出:

uptime

让我们来看一些重音的例子。

Unix/Linux cpu压力测试

让我们通过依次处理所有不同的CPU压力方法来开始N个练习CPU的工人:

uptime
stress-ng --cpu 4 --timeout 60s --metrics-brief
uptime

Unix/Linux cpu压力测试

对于磁盘启动,N个工作人员连续写入,读取和删除临时文件:

stress-ng --disk 2 --timeout 60s --metrics-brief

可以将-io N选项传递给Stress-ng命令以将缓冲区高速缓存提交到磁盘:

stress-ng --disk 2 --io 2 --timeout 60s --metrics-brief

Unix/Linux内存压力测试

让我们填充内存。
每个vm worker使用mmap N个字节,默认值为256MB。
可以使用后缀b,k,m或者g将大小指定为总可用内存的百分比,或者以字节,千字节,兆字节和千兆字节为单位:

stress-ng --vm 2 --vm-bytes 1G --timeout 60s

" --vm 2"将启动N个工作程序(2个工作程序),连续调用mmap/munmap并写入分配的内存。
请注意,如果没有足够的物理内存和交换空间,这可能导致系统使Linux系统上的内核OOM杀手跳闸。

全部放在一起

要使用1GB虚拟内存使用4个CPU压力源,2个io压力源和1个vm压力源运行60秒,请执行:

stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 60s --metrics-brief

输出示例:
显示在Linux上进行压力测试的CPU和内存(VM)的Stress-ng运行

在此示例中,运行16个cpu压力源,并在900000 bogo操作后停止:

stress-ng --cpu 16 --cpu-ops 900000
stress-ng --cpu 16 --cpu-ops 900000 --timeout 16

输出示例:

stress-ng: info:  [30367] dispatching hogs: 16 cpu
stress-ng: info:  [30367] successful run completed in 60.17s (1 min, 0.17 secs)

要依次依次运行所有压力源的4个实例,每个实例持续6分钟,最后汇总性能指标:

stress-ng --sequential 4 --timeout 6m --metrics

要运行2个FFT cpu压力源,请在进行5000次bogo操作之后停止并产生仅针对FFT结果的摘要:

stress-ng --cpu 2 --cpu-method fft --cpu-ops 5000 --metrics-brief

要在通过所有可用CPU压力源工作的所有在线CPU上运行cpu压力源2小时:

stress-ng --cpu 0 --cpu-method all -t 2h

将所有压力源的2个实例运行10分钟:

stress-ng --all 2 --timeout 10m

要运行从所有可用压力源中随机选择的128个压力源:

stress-ng --random 128

要运行所有不同的CPU压力源的64个实例,并在5分钟内验证计算正确,最后给出bogo操作摘要:

stress-ng --cpu 64 --cpu-method all --verify -t 5m --metrics-brief

要使所有压力源一个接一个地运行5分钟,每个压力源的实例数与在线CPU的数量匹配:

stress-ng --sequential 0 -t 5m

要一一运行io类中的所有压力源,每个压力源1分钟,并同时运行每个压力源的8个实例,并在运行结束时显示总体时间利用率统计信息:

stress-ng --sequential 8 --class io -t 1m --times

我应该以root用户访问权限运行stess-ng吗?

使用root特权运行Stress-ng将调整Linux系统上的内存不足设置,以使应激源在内存不足的情况下无法杀死,因此请谨慎使用。
有了适当的特权,重读ng可以允许调整离子浓度和离子浓度,再次使用时,请务必小心。
但是,某些选项确实需要root特权才能更改各种/sys接口控件。
有关更多信息,请参见stess-ng命令手册页。