首页 > 系统相关 >Linux stress 命令

Linux stress 命令

时间:2025-01-09 14:13:40浏览次数:1  
标签:stress -- vm 命令 内存 Linux 进程 CPU

stress 命令主要用来模拟系统负载较高时的场景,本文介绍其基本用法。文中 demo 的演示环境为 ubuntu 18.04。

基本语法

语法格式:
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 命令是个得力的助手。通过模拟各种高负载情况,可以帮助我们更好的理解系统瓶颈并掌握性能检测工具的用法。

标签:stress,--,vm,命令,内存,Linux,进程,CPU
From: https://www.cnblogs.com/ylxtiankong/p/18662020

相关文章

  • 网络流量控制神器:深入理解 `tc` 命令及其实际应用
    网络流量控制神器:深入理解tc命令及其实际应用在现代互联网环境中,网络流量管理对系统稳定性和性能优化至关重要。作为Linux系统中强大的流量控制工具,tc(TrafficControl)为我们提供了对流量排队、限速、优先级管理等功能的全面控制。无论是开发测试还是生产环境下的性能调......
  • Linux TCP连接数查询
    netstat-anput2统计连接数2.1统计80端口的连接数netstat-nat|grep-i"80"|wc-l2.2统计总连接数netstat-nat|wc-l2.3统计已连接上的,状态为establishednetstat-na|grepESTABLISHED|wc-l3统计所有请求状态及数量netstat-an|awk'/^tcp/{++S[$NF]}END{for......
  • 一些FTP命令投喂
    1.连接与登录#连接到FTP服务器ftpftp.example.com#登录(假设用户名是anonymous,密码是空或ftp@example.com)USERanonymousPASSftp@example.com#对于某些服务器,密码可以省略或留空直接回车2.目录操作#列出当前目录内容LIST#更改到名为"files"的目录CWDfil......
  • linux进程间通信的方式
    在Linux系统中,进程间通信(Inter-ProcessCommunication,IPC)是多个进程之间共享数据或交换信息的方式。由于Linux中的进程具有独立的地址空间,直接共享内存是不可能得,因此需要使用特定的机制来实现进程间通信。1.管道(Pipe)匿名管道特性:单向通信,通常用于具有亲缘关系的进程(父子进......
  • linux上下载安装配置tomcat
    linux上下载安装配置tomcat下载https://tomcat.apache.org/ #tomcat官网安装注意:tomcat需要jdk环境,参考:linux上安装jdk#有安装包后,在linux新建目录/opt/tomcatmkdir/opt/tomcatcd/opt/tomcat#把安装包放到此目录,用xftp上传#在Linux上下载的,就进入压缩包所在......
  • 如何监控Linux服务器资源使用情况
     --- 好的方法很多,我们先掌握一种 ---【背景】在做性能验证时(其他情况通用),需要监控服务器资源的使用情况,例如cpu,内存等信息我们就可以简单通过shell脚本后台运行,持续监控需要监控的资源情况【上代码】看官们,请根据实际使用情况,调整监控内容(如下代码只有cpu,内存),for循环......
  • Linux安装Ollama并启用服务教程
    Ollama官网https://ollama.com/download/linuxInstallwithonecommand:curl-fsSLhttps://ollama.com/install.sh|sh使用systemd运行Ollama服务查看ollama所在目录whereisollama#ollama:/usr/local/bin/ollama/usr/local/lib/ollama启动Ollama服......
  • Linux其他
    1. 2.Gitlab应用架构 3.运维发展史 4.云原生时代:以Devops、SRE框架为指导,Docker/K8S/微服务为基础,用分布式方式加上Python和Go语言,构建一套云技术产品体系,以及进行高级管理工具的二次开发,实现属于公司自己的自动化运维体系以及云技术体系的自动化产品。使用的自动化......
  • Linux-公有云架构
    阿里云概述 付费模式 地区可用区 vpc虚拟局域网虚拟交换机 扩容磁盘空间或增加硬盘.如果是数据盘可以选择扩容.如果是系统盘,增加硬盘挂载块存储:磁盘,云盘文件存储:nfs存储,samba存储,nas存储对象存储:自带数据高可用.ceph(开源软件),阿里云ossoss......
  • Linux-Prometheus
     Prometheus监控架构  prometheus通过各种exporter监控客户端.常用exporternode_exporter获取主机的系统监控项.其他项目通过各种exporter(docker运行)实现.这个部分主要讲解的是prometheus服务端的配置(连接客户端)prometheus.yml主配置文件.静态配置:static_......