模拟负载的方法起步

在验证一些系统稳定性的时候,我们可能并不是关注 UnixBench性能测试Sysbench性能测试 对系统的性能评估,而是希望通过持续的压力来模拟一些生产环境问题,借此测试稳定性。这时,我们需要一些简单的脚本或者命令来实现。这里汇总一些我使用过、验证过有效且方便的方法。

stress压力模拟工具

stress 是非常常用的压力工具,安装和使用都非常简便,发行版一般都提供了这个工具 - 请参考 stress压力模拟工具

脚本死循环

如果单纯对CPU进行压力,可以不用任何工具,直接执行脚本死循环就可以达到目的:

for i in {1..4};do while : ; do : ; done & done

上述命令启动了4个 while 循环,由于是永远true,所以会死循环执行空指令,直接把4个CPU全部耗尽。

此时提示进程pid:

[1] 41730
[2] 41731
[3] 41732
[4] 41733

如果没有进入后台,可以通过以下命令停止:

for i in {1..4}; do kill %$i;done

此时提示:

[1]   Terminated              while :; do
    :;
done
[2]   Terminated              while :; do
    :;
done
[3]-  Terminated              while :; do
    :;
done
[4]+  Terminated              while :; do
    :;
done

则进程终止

/dev/null 设备操作生成压力

对于 /dev/null 设备进行IO会产生巨大CPU压力,以下是一些案例:

yes > /dev/null &

dd if=/dev/zero of=/dev/null

# 对3个CPU核心压测5秒钟
seq 3 | xargs -P0 -n1 timeout 5 yes > /dev/null

# 如果仅仅是持续压力直到crtl-c
seq 3 | xargs -P0 -n1 md5sum /dev/zero

通过openssl计算

openssl 提供了一个 speed 命令测试算法速度(可以通过这种方式对比不同CPU的加密速度):

openssl speed -multi $(nproc --all)

上述 nproc 命令会打印出系统可用的处理器数量,这样 openssl 就会对所有cpu进行 speed 计算,也就是全力压测所有CPU

sha1sum计算

  • sha1sum 命令会对CPU进行压力,可以启动一定数量进程使得对应数量的CPU产生压力:

    sha1sum /dev/zero &
    

重复上述命令,也就是对任意数量CPU产生压力

结束时候执行:

killall sha1sum

md5sum计算

  • md5sum 命令也同样对cpu产生压力,以下脚本命令 -P4 表示启动4个并发,这个数值可调,且脚本命令非常巧妙:

    nproc | xargs seq | xargs -n1 -P4 md5sum /dev/zero
    

使用随机生成器

  • urandom 设备可以用来作为输入源,当压缩程序对随机数进行压缩并投入到null设备就会对系统产生持续压力:

    cat /dev/urandom | gzip -9 > /dev/null
    

如果需要对多个CPU进行压力,只需要重复 “套娃” 就可以:

cat /dev/urandom | gzip -9 | gzip -d | gzip -9 | gzip -d > /dev/null
  • 使用 sha512sum 工具也可以:

    sha512sum /dev/urandom
    

命令行内存压力

前面使用 stress 来模拟内存压力,实际上也可以使用操作系统 ramfs 来实现:

mkdir z
mount -t ramfs ramfs z/
dd if=/dev/zero of=z/file bs=1M count=128

磁盘压力

可以通过循环复制文件来实现磁盘压力:

dd if=/dev/zero of=loadfile bs=1M count=1024
while true; do cp loadfile loadfile1; done

如果仅想循环10次,可以改成:

for i in {1..10}; do cp loadfile loadfile1; done

参考