首页 > 系统相关 >(笔记)Linux环境下stress功能介绍及压力测试

(笔记)Linux环境下stress功能介绍及压力测试

时间:2023-10-27 11:11:19浏览次数:40  
标签:stress -- vm 笔记 内存 Linux 进程 CPU

 

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

 

二、安装 stress

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

$ sudo apt install stress
$ stress --version

 

三、消耗 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

 

八、总结

对于学习 Linux 性能检测相关的命令来说,stress 命令是个得力的助手。通过模拟各种高负载情况,可以帮助我们更好的理解系统瓶颈并掌握性能检测工具的用法。

 

九、linux下服务器性能监控

 

1、top监控整体使用情况

各参数涵义如下:

load average:当前系统负载的平均值,后面的3个值分别为1分钟、5分钟、15分钟前进程的平均数。一般认为这个数超过CPU数目时,CPU将比较吃力地负载当前系统所包含的进程。

表示CPU的几个参数:

us:用户空间占用CPU百分比

sy:内核空间占用CPU百分比

ni:用户进程空间内改变过优先级的进程占用CPU百分比

id:空闲CPU百分比

wa:等待输入输出的cpu时间百分比

输入top后,按大写P,以CPU占用大小排序,按M,以内存占用大小排序

从应用程序的角度来看,可用内存=系统free memory+buffers+cached,其中buffers/cached是为了提高文件读取的性能,当应用程序要用到内存的时候,buffer/cached会很快地被回收

 

2、服务器I/O读写负载评估

先用top查看,wa的值标识I/O等待所占用的CPU时间的百分比,高于30%时I/O压力高。

再用iostat –x 1 10查看,如果没有该文件,要yum install systat 安装。查看%util,%idle,如果%util接近100%,说明产生的I/O请求太多,I/0系统已经满负荷,该磁盘可能存在瓶颈,%idle小于70%,I/0压力就比较大了,一般读取速度有较多的等待。

同时结合vmstat -1命令,查看b参数,表示等待资源的进程数,如等待I/O,内存等,如常时间>1,则要关注。可评估i/o读写负载。

 

3、其他系统日常管理

  • 查看系统的cpu数:cat /proc/cpu info
  • 监控系统状态,查看具体是哪里的压力:vmstat

          proc列显示进程相关信息

          r表示运行和等待CPU时间片的进程数,如长期>服务器CPU个数,说明CPU不够用了

          swap表示内存交换情况

  • 查看内存使用情况:free,如free -h
  • 查看系统进程:ps aux
  • 打印网络连接状况:netstat –an
  • 打印当前系统启动哪些端口:netstat –lnp
  • 查看磁盘的使用情况和文件系统被挂载的位置:df –lh

 

注:本文部分内容参考自:https://www.cnblogs.com/sparkdev/p/10354947.html

 

标签:stress,--,vm,笔记,内存,Linux,进程,CPU
From: https://www.cnblogs.com/tdyizhen1314/p/17791572.html

相关文章

  • 最近学习到的一些linux的常用命令
    1、ls命令可以列出当前目录下的内容清单。它与windows下的dir命令很像 2、cd命令这个命令可以改变目录cd~  //更改到本用户的主目录cddesktop //更改目录到desktop cd.. //更改目录到上一级 3、管道输出可以把shell命令输出到文件里面ls>somefile.tx......
  • nlohmannjson使用笔记
    使用引用获取字段值,以避免数据复制:autoid=jfo["id"].get_ref<conststd::string&>();使用解引用访问字段值,提高效率并简化代码if(autoit=jfo.find("transforms");it!=jfo.end()){for(constauto&jto:*it){autoid=jto["id"].get......
  • vmware上的linux挂载共享目录
    创建共享文件夹vmware上点击设置,进入虚拟机设置,点击选项,共享文件夹,添加主机路径,物理机上要分享的文件夹路径,这里我设置为D:\test_shared名称,要在虚拟机上显示的名称,,这里我设置为VM-centos-share一般选择总是启动,确认。打开CentOS终端,输入命令,查看共享文件夹情况vmware-hg......
  • Linux中安装软件
    如果是桌面版,先切换到root用户,终端输入su,回车后输入密码,回车确认。运行以下命令安装g++编译器yuminstallgccgcc-c++查看g++版本g++--version我用的是centos7.9,g++的版本很低。要查看当前CentOS系统上的最新可用g++版本,你可以使用yum包管理工具的list命令来列出......
  • 信息安全系统设计与实现——学习笔记7
    任务详情:自学教材第11章,提交学习笔记Part1知识点归纳&GPT提问知识点归纳Part2问题与解决思路问题gpt解决Part3实践过程截图Part4其他......
  • Linux下安装Qt6的问题及解决
    Linux下安装完Qt6,新建Qt/QtQuickCMake工程编译出现如下错误:Foundpackageconfigurationfile:Qt6Config.cmakebutitsetQt6FOUNDtoFALSEsopackage"Qt6"isconsideredtobeNOTFOUND.Reasongivenbypackage:FailedtofindrequiredQtcomponen"Quick&......
  • 2023年10月26日阅读笔记
    《代码整洁之道》这是一本关于编程和代码维护的经典之作。通过对这本书的阅读,我深入了解了如何编写清晰、易读、易维护的代码,以及如何通过良好的编程习惯和原则来提高代码质量和效率。再加上我本身是一个强迫症,非常注重代码的整洁和规范,所以对于这本书的阅读兴趣也十分高涨。首......
  • 初学者Linux的学习记录
    Linux是什么呢?让我们来看一下它的定义:定义:Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统;其实它的本质就是一个操作系统。Linux的四大特点:一切皆文件:Linux系统中的一切都归结为文件。对于操作系统内核......
  • Linux免密登录脚本
    首先安装sshpassyuminstall-ysshpassLinux免密登录脚本:#!/bin/bashexportIP="192.168.100.140192.168.100.141192.168.100.142"exportSSHPASS=086530forHOSTin$IP;dosshpass-essh-copy-id-oStrictHostKeyChecking=no$HOST scp/etc/hostsroot@$H......
  • 图像调试笔记
    工具YUVEye:免费7yuv:支持编码多,显示和实际差别不大,收费YUView:支持的编码少,免费linuxdrm图像输出测试modetest图像编码分类https://pic1.zhimg.com/v2-c559ba4590b09803dfc6fb735ad62148_r.jpg......