Linux下对CPU、内存、磁盘进行压力测试工具 stress

在大多数测试场景下,需要对已部署应用软件的硬件平台进行系统级别资源的压力测试,以此评估在应用运行期间因系统资源的缺乏对应用的影响到底有多大? 这里简单介绍一个工具stress 。本文大部分内容摘自网络

stress安装

epel源安装 yum install epel-release

yum install tress stress-ng && apt-get install stress stress-ng

[root@yumlocal ~]# stress –help 查看具体用法

举例子

1、对cpu进行压力测试

stress -c N 会产生N个进程,生成N个工作进程占用cpu。一般一个进程占用一个核,现在需要对其中四个核进行压力测试10秒钟

stress -c 4 -t 10s

-c 4参数指定 启动4个worker线程,每个核上一个线程, 对CPU进行压力测试 -t指定测试时间 10s 不指定-t 则手动终止ctrl+c

2、对内存进行压力测试

类似的,使用 stress -m N 会让stress生成N个工作进程来占用内存。每个进程默认占用256M内存,但可以通过 –vm-bytes 来进行设置。 例如

stress -m 3 –vm-bytes 300M

3、对磁盘压力测试有两个参数:

stress -i N 会产生N个进程,每个进程反复调用sync()将内存上的内容写到硬盘上.(这个方法没啥意义)

而 stress -d N 会产生N个进程,每个进程往当前目录中写入固定大小的临时文件,然后执行unlink操作删除该临时文件。 临时文件的大小默认为1G,但可以通过 –hdd-bytes 设置临时文件的大小。比如

stress -i 2 -d 4 –hdd-bytes 512M

这里其实建议用stress-ng工具 用法一样,将stress换成 stress-ng

4、混合使用

stress支持同时对多个指标进行压力测试,只需要把上面的参数组合起来就行

stress -c 4 -m 2 –vm-bytes 128M -i 2 -d 2 -t 10s

有个升级版本的stress工具,stress-ng 可以做到更细致的压力测试。

模拟网络丢包和延时

模拟延迟传输

tc qdisc add dev eth0 root netem delay 100ms

该命令将 eth0 网卡的传输设置为延迟100毫秒发送。

更真实的情况下,延迟值不会这么精确,会有一定的波动,我们可以用下面的情况来模拟出带有波动性的延迟值:
tc qdisc add dev eth0 root netem delay 100ms 10ms

该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。

还可以更进一步加强这种波动的随机性:

tc qdisc add dev eth0 root netem delay 100ms 10ms 30%

该命令将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送。

替换延时数据值

用replace来修改网络延迟为4ms

tc qdisc replace dev eth0 root netem delay 4ms

模拟网络丢包

tc qdisc add dev eth0 root netem loss 1%

该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包。

也可以设置丢包的成功率:

tc qdisc add dev eth0 root netem loss 1% 30%

该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为 30% 。

模拟包重复

tc qdisc add dev eth0 root netem duplicate 1%

该命令将 eth0 网卡的传输设置为随机产生 1% 的重复数据包
模拟包损坏

tc qdisc add dev eth0 root netem corrupt 0.2%
该命令将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。 (内核版本需在2.6.16以上)

模拟包乱序

tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%

该命令将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟 10 秒。

新版本中,如下命令也会在一定程度上打乱发包的次序:

tc qdisc add dev eth0 root netem delay 100ms 10ms

查看当前的延迟信息

tc qdisc show dev eth0

删除规则

好了,模拟完丢包和延迟之后,要记得删除掉规则:

tc qdisc del dev eth0 root