Linux压力测试工具stress

发表于:2021-2-22 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:vaon    来源:博客园

#
stress
分享:
  环境
  CentOS 7.6
  功能
  增加Linux系统CPU、内存、磁盘I/O资源占用,模拟高资源占用场景。
  安装
  yum install -y epel-release  #CentOS源本身没有stress,需要安装EPEL扩展第三方源。
  yum install -y stress
  参数
  语法格式:
  stress <options>
  常用选项:
  -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
  使用 top 命令查看 CPU 的状态如下(CPU 在用户态满负荷运转):
  消耗内存资源
  下面的命令产生两个子进程,每个进程分配 300M 内存:
  $ 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
  一直在进行默认的 stride 操作,user 非常高(cpu 在用户态忙碌)。
  $ stress --vm 2 --vm-bytes 500M --vm-hang 5
  上面这两种状态不断切换,但整体上看 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
  $ stress --vm 2 --vm-bytes 500M --vm-stride 1M
  为什么会产生这样的结果?原因是单独的赋值和对比操作可以让 CPU 在用户态的负载占到 99% 以上。--vm-stride 值增大就意味着减少赋值和对比操作,这样就增加了内存的释放和分配次数(cpu在内核空间的负载)。
  不指定 --vm-stride 选项就使用默认值是 4096,CPU 负载情况居于前两者之间:
  $ stress --vm 2 --vm-bytes 500M
  消耗 IO 资源
  下面的命令产生 4 个进程,每个进程都反复调用 sync 函数将内存上的内容写到硬盘上:
  $ stress -i 4
  使用 top 命令查看 CPU 的状态如下:
  sy 升高,wa(iowait) 非常高。
  压测磁盘及 IO
  下面的命令创建一个进程不断的在磁盘上创建 10M 大小的文件并写入内容:
  $ stress -d 1 --hdd-bytes 10M
  使用 top 命令查看 CPU 的状态如下(此时的 CPU 主要消耗在内核态):
  下面是 iostat 2 的输出(同样是高 iowait,瓶颈是写磁盘):
  其它选项介绍
  --verbose
  显示 stress 程序运行过程中的详细信息:
  --timeout N
  在 N 秒后结束程序。
  --quiet
  stress 程序运行的过程中不输出信息。
  -n, --dry-run
  输出程序会做什么而并不实际执行相关的操作:
  --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),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号