100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Linux系统压力测试工具stress

Linux系统压力测试工具stress

时间:2021-08-17 08:06:18

相关推荐

Linux系统压力测试工具stress

linux系统下,可以使用stress 命令主要用来模拟系统负载较高时的场景,本文介绍其基本用法。

环境为: centos8.2

1. 基本语法

iostat属于sysstat软件包。可以直接安装。

# yum -y install sysstat

语法格式:

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显示详细的信息

2. 安装 stress

centos8.2 系统默认没有安装 stress,需要通过下面的命令安装:

# yum install stress# stress --versionstress 1.0.4

3. 消耗 CPU 资源

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

# stress -c 4stress: info: [128235] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd

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

%Cpu(s): 100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

4. 消耗内存资源

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

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

# ps aux | grep stressroot128349 0.0 0.0 7972 1216 pts/1 S+ 21:56 0:00 stress --vm 2 --vm-bytes 300M --vm-keeproot128350 112 3.8 315176 307464 pts/1 R+ 21:56 0:04 stress --vm 2 --vm-bytes 300M --vm-keeproot128351 112 3.8 315176 307464 pts/1 R+ 21:56 0:04 stress --vm 2 --vm-bytes 300M --vm-keep

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

–vm-keep

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

–vm-hang N

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

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

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

%Cpu(s): 98.6 us, 1.4 sy,

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

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

%Cpu(s): 0.7 us, 9.0 sy%Cpu(s): 0.7 us, 0.0 sy

上面这两种状态不断切换,但整体上看 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

%Cpu(s): 45.7 us, 54.3 sy

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

%Cpu(s): 0.7 us, 99.3 sy

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

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

# stress --vm 2 --vm-bytes 500M

%Cpu(s): 5.6 us, 94.1 sy

5.消耗 IO 资源

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

# stress -i 4stress: info: [128608] dispatching hogs: 0 cpu, 4 io, 0 vm, 0 hdd

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

%Cpu(s): 3.1 us, 34.4 sy, 0.0 ni, 0.0 id, 62.2 wa, 0.0 hi, 0.4 si, 0.0 st

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

6.压测磁盘及 IO

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

# stress -d 1 --hdd-bytes 10Mstress: info: [128669] dispatching hogs: 0 cpu, 0 io, 0 vm, 1 hdd

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

%Cpu(s): 0.7 us, 99.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

iostat 2查看输出,同样是高 iowait,瓶颈是写磁盘。

7.其它选项介绍

–verbose

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

# stress -d 1 --hdd-bytes 1G --verbosestress: info: [128808] dispatching hogs: 0 cpu, 0 io, 0 vm, 1 hddstress: dbug: [128808] using backoff sleep of 3000usstress: dbug: [128808] --> hoghdd worker 1 [128809] forkedstress: dbug: [128809] seeding 1048575 byte buffer with random datastress: dbug: [128809] opened ./stress.oQCCF6 for writing 1073741824 bytesstress: dbug: [128809] unlinking ./stress.oQCCF6stress: dbug: [128809] fast writing to ./stress.oQCCF6stress: dbug: [128809] slow writing to ./stress.oQCCF6stress: dbug: [128809] closing ./stress.oQCCF6 after 1073741824 bytesstress: dbug: [128809] opened ./stress.eLo4H8 for writing 1073741824 bytesstress: dbug: [128809] unlinking ./stress.eLo4H8stress: dbug: [128809] fast writing to ./stress.eLo4H8stress: dbug: [128809] slow writing to ./stress.eLo4H8stress: dbug: [128809] closing ./stress.eLo4H8 after 1073741824 bytesstress: dbug: [128809] opened ./stress.wTP9h6 for writing 1073741824 bytesstress: dbug: [128809] unlinking ./stress.wTP9h6

–timeout N

在 N 秒后结束程序。

–quiet

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

-n, --dry-run

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

# stress --vm 2 --vm-bytes 500M --vm-keep -nstress: info: [128880] dispatching hogs: 0 cpu, 0 io, 2 vm, 0 hddstress: info: [128880] successful run completed in 0s

–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 命令是个得力的助手。通过模拟各种高负载情况,可以帮助我们更好的理解系统瓶颈并掌握性能检测工具的用法。

参考:

stress man page

stress 1.0.4 code

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。