stress - 系统压力模拟工具

前言

stress是一个故意制造系统压力的工具。它提供了一系列的参数用于配置如何制造CPU,内存,IO操作,磁盘压力。

安装

1
2
3
# centos平台
$yum install epel-release
$yum install stress

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-c, --cpu N
spawn N workers spinning on sqrt()
启动n个worker循环执行sqrt计算,用于模拟cpu型进程
-i, --io N
spawn N workers spinning on sync()
循环执行sync,模拟io型进程
-m, --vm N
spawn N workers spinning on malloc()/free()
循环调用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
只申请释放一次
-t, --timeout N
timeout after N seconds
执行多少秒后退出程序
.
.
.

stress中的worker都是通过多进程方式实现的,每个worker是一个独立子进程。

使用场景

模拟多种场景举例

1
2
# 8个cpu类型进程,4个io类型进程,2个不停申请释放内存的进程,每次申请128M大小内存,10后退出stress程序
$stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

模拟cpu应用

1
2
3
4
# 开启1个cpu类型进程
$stress -c 1 -t 600
# 开启8个cpu类型进程
$stress -c 8 -t 600

模拟io应用

1
$stress -i 1 -t 600

其他

关于-i参数无法模拟io高的场景

这是因为strss是通过循环调用sync函数来模拟io高的场景。sync的作用是将所有的对文件的修改的缓冲写入文件系统。
然而如果系统对文件修改的缓冲本来就很少,那么就无法模拟io高的场景。
另外,由于是死循环调用sync这个系统调用的函数,所以可能会导致cpu sys升高。

sync函数说明: sync(2): commit buffer cache to disk - Linux man page

关于实现

stress的代码量很小,只有一个760行的c文件,感兴趣或者对参数不理解可以直接看看代码。
在以下这个网页内有下载链接: stress project page

参考链接

本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/42434/

0%