linux分区压力测试,Linux压力测试工具stress

环境

CentOS 7.6

功能

增加Linux系统CPU、内存、磁盘I/O资源占用,模拟高资源占用场景。

安装

yum install -y epel-release  #CentOS源本身没有stress,需要安装EPEL扩展第三方源。

yum install -y stress

参数

语法格式:

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

显示详细的信息

消耗 CPU 资源

stress 消耗 CPU 资源的方式是通过调用 sqrt 函数计算由 rand 函数产生的随机数的平方根实现的。下面的命令会产生 4 个这样的进程不断的进行计算:

$ stress -c 4

d51123b0180742e7a5357edd99c1b2ae.png

使用 top 命令查看 CPU 的状态如下(CPU 在用户态满负荷运转):

acf8148779d2b6d355b28da44599c47f.png

消耗内存资源

下面的命令产生两个子进程,每个进程分配 300M 内存:

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

ec66b57f383bb713ed7be2c8eecf32b3.png

父进程处于睡眠状态,两个子进程负责资源消耗。

--vm-keep

一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)。

--vm-hang N

指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程。

--vm-keep 和 --vm-hang 都可以用来模拟只有少量内存的机器,但是指定它们时 CPU 的使用情况是不一样的。

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

034de05df1fce6430cab1a92acf2b0cc.png

一直在进行默认的 stride 操作,user 非常高(cpu 在用户态忙碌)。

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

e1031291a1124fc2c93058d42fbfa6a5.png

上面这两种状态不断切换,但整体上看 CPU 的负载并不高。

--vm-stride B

不断的给部分内存赋值,让 COW(Copy On Write)发生。只要指定了内存相关的选项,这个操作就会执行,只是大小为默认的 4096。赋值内存的比例由参数决定:

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

ptr[i] = 'Z';           /* Ensure that COW happens.  */

bytes 为消耗的总内存大小,stride 为间隔。

该参数会影响 CPU 状态 us 和 sy:

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

d416a58b2140bf048ea8a7c079c213ab.png

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

6acae1d3407eef0f7341243b3f77f8ef.png

为什么会产生这样的结果?原因是单独的赋值和对比操作可以让 CPU 在用户态的负载占到 99% 以上。--vm-stride 值增大就意味着减少赋值和对比操作,这样就增加了内存的释放和分配次数(cpu在内核空间的负载)。

不指定 --vm-stride 选项就使用默认值是 4096,CPU 负载情况居于前两者之间:

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

f07623a84fc0fa1fb38e24d55be3436e.png

消耗 IO 资源

下面的命令产生 4 个进程,每个进程都反复调用 sync 函数将内存上的内容写到硬盘上:

$ stress -i 4

0eadaf2c15f8e21e19bc8617617adb10.png

使用 top 命令查看 CPU 的状态如下:

a024141b588ff3372817501973d9de29.png

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

压测磁盘及 IO

下面的命令创建一个进程不断的在磁盘上创建 10M 大小的文件并写入内容:

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

21cb125c488178a590565ad93f773382.png

使用 top 命令查看 CPU 的状态如下(此时的 CPU 主要消耗在内核态):

f43434584fca1869f4e21a5e9bed5af5.png

下面是 iostat 2 的输出(同样是高 iowait,瓶颈是写磁盘):

3dbc20da41f9b2798ec188a34ac06e42.png

其它选项介绍

--verbose

显示 stress 程序运行过程中的详细信息:

92362936d146fb42fef957df5d41e01f.png

--timeout N

在 N 秒后结束程序。

--quiet

stress 程序运行的过程中不输出信息。

-n, --dry-run

输出程序会做什么而并不实际执行相关的操作:

7cbe38da92ddac4aff20849744976a2a.png

--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

本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值