前言

stress是一个功能强大的 Linux 系统压力测试工具,能够模拟高负载场景,帮助用户测试系统的稳定性、性能和资源管理能力。它可以针对 CPU、内存、磁盘 IO 等资源进行单独或混合测试,是系统管理员和开发人员进行性能调优和瓶颈分析的得力助手。本文档详细介绍了了安装方法、基本语法、常用选项、实际应用示例以及性能监控建议,旨在为用户提供一份全面且条理清晰的使用指南。


一、stress 工具简介

stress 是一个轻量级的命令行工具,通过创建多个进程来模拟系统的高负载环境。它支持对 CPU、内存、磁盘 IO 等资源进行压力测试,帮助用户评估系统在极端条件下的表现。


二、安装 stress 工具

2.1 CentOS 7 系统安装

在 CentOS 7 上,需要通过 EPEL 仓库安装stress

# 启用 EPEL 仓库
sudo yum install epel-release

# 安装 stress 工具
sudo yum install stress

# 验证安装
stress --version

在这里插入图片描述

2.2 Ubuntu 系统安装

Ubuntu 系统可以通过以下命令安装:

sudo apt install stress
stress --version

三、stress 命令基本语法

stress 命令的基本语法如下:

stress <options>

其中 <options> 是用于定义资源消耗类型、数量和持续时间的参数。


四、常用选项和参数

4.1 CPU 资源消耗

  • -c, --cpu N:启动 N 个进程,每个进程执行计算密集型任务(计算随机数的平方根)。
  • --backoff N:新 fork 的进程延迟 N 微秒后开始执行。

示例:

stress -c 4

启动 4 个进程消耗 CPU 资源。
在这里插入图片描述
可以使用top命令查看进程资源占用情况

在这里插入图片描述

4.2 内存资源消耗

  • -m, --vm N:启动 N 个进程,每个进程分配和释放内存。
  • --vm-bytes B:指定每个进程分配的内存大小。

示例:

stress -m 2 --vm-bytes 300M

启动 2 个进程,每个进程分配 300MB 内存。

在这里插入图片描述

在这里插入图片描述

  • --vm-keep:保持内存占用,不释放。
  • 一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)。

示例:

stress --vm 2 --vm-bytes 300M --vm-keep

启动 2 个进程,每个分配 300MB 内存并保持占用。
在这里插入图片描述
在这里插入图片描述

  • --vm-hang N:分配内存后睡眠 N 秒,再释放内存并重复。
  • 指每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程。

示例:

stress --vm 2 --vm-bytes 300M --vm-hang 5

启动 2 个进程,每个进程分配 500MB 内存,并在每次分配后挂起 5 秒。
在这里插入图片描述
在这里插入图片描述
每隔5秒,内存会被占用和释放,使用top命令可以动态显示该过程。
在这里插入图片描述

  • --vm-stride B:通过赋值触发 COW(Copy On Write)操作,这个操作增加了CPU 和内存的负载。

示例:

stress --vm 2 --vm-bytes 500M--vm-stride 64

这将启动 2 个进程,每个进程分配 500MB 内存,并使用步进值 64 触发 COW 操作。

在这里插入图片描述
在这里插入图片描述

4.2.1 cpu的用户态和内核态

--vm-stride参数会影响CPU 状态 us 和 sy

示例 1:小步长(高 CPU 用户态负载)

stress --vm 2 --vm-bytes 500M --vm-stride 64

效果:

  • 每 64 字节写入一次内存,触发密集 COW 操作。

  • CPU 主要在用户态(us)忙碌,计算和写入数据。

在这里插入图片描述
示例 2:大步长(高 CPU 内核态负载):

stress --vm 2 --vm-bytes 500M --vm-stride 1M

效果:

  • 每 1MB 写入一次内存,减少 COW 频率。

  • CPU 主要在内核态(sy)处理内存分配/释放。

在这里插入图片描述
示例 3:默认步长(平衡负载):

stress --vm 2 --vm-bytes 500M
  • 默认步长是 4096 字节(4KB),负载介于小步长和大步长之间。
    在这里插入图片描述

参数对性能的影响

--vm-strideCPU 负载倾向内存行为适用场景
小(如 64)高 us(用户态)频繁 COW,密集写入模拟计算密集型内存操作
中(如 4K)平衡 us/sy默认 COW 频率一般内存压力测试
大(如 1M)高 sy(内核态)较少 COW,更多内存分配释放模拟内存管理密集型场景

关键说明:

  • COW(Copy-On-Write):写时复制机制, stride 越小,触发频率越高。
  • us/sy:用户态(user)与内核态(system)CPU 使用比例,反映负载分布。
  • 适用场景:根据测试目标选择对应值,例如需要模拟内核内存管理压力时建议使用大 stride。

4.3 IO 资源消耗

  • -i, --io N:启动 N 个进程,每个进程调用 sync() 将内存上的内容写入磁盘,消耗 IO 资源。

示例:

stress -i 4

启动 4 个进程消耗磁盘 IO 资源。
在这里插入图片描述
可以使用iostat监控磁盘 I/O 统计信息,包括读写速率、I/O 等待时间等。

iostat -x 2
#-x:显示详细的 IO 统计信息(推荐用于分析)
#2:每 2 秒刷新一次数据

核心指标解析:

  • %util:设备使用率,数值接近100%表明I/O设备已达满载状态
  • r/s、w/s:每秒读写操作次数(可通过stress -i命令提升该数值)
  • rkB/s、wkB/s:每秒数据传输量(以KB为单位)
  • await:I/O请求平均响应时长(毫秒),数值升高反映系统I/O负载加重
  • svctm:平均处理耗时(毫秒)

在这里插入图片描述

  • --hdd-bytes B:指定写入文件的大小。

示例:

stress -i 1 --hdd-bytes 10M

启动 1 个进程,创建 10MB 文件并写入内容。
在这里插入图片描述
在这里插入图片描述

4.4 混合资源消耗

你可以同时消耗 CPU、IO 和 内存 等多个资源,例如:

stress --cpu 4 --io 4 --vm 2 --vm-bytes 100M --vm-keep --hdd-bytes 10M

此命令会:

  • 启动 4 个 CPU 进程。
  • 启动 4 个 IO 进程,每个进程创建10Mb内容并写入。
  • 启动 2 个内存进程,每个进程分配 100MB 内存并保持占用。

此命令会同时消耗 CPU、内存、IO 和磁盘资源,适用于进行系统的综合压力测试。

在这里插入图片描述
在这里插入图片描述

4.5 其他常用选项

  • -t, --timeout N:指定测试运行时长(秒)。
stress -c 4 -t 60

该命令将启动 4 个 CPU 负载进程,并在 60 秒后结束测试。
在这里插入图片描述

  • -v, --verbose:显示详细运行信息。
stress -c 4 -v

该命令将启动 4 个 CPU 负载进程,并且显示详细信息。
在这里插入图片描述

  • -q, --quiet:静默运行,不输出信息。
stress -c 4 -q

在这里插入图片描述

  • -n, --dry-run:模拟运行,将要执行的操作输出而不实际执行,适合预先查看命令会做什么。
streee -c 4 -n

在这里插入图片描述


五、性能监控建议

在进行压力测试时,建议使用以下工具监控系统性能:

  • top:查看 CPU 和内存使用情况。
  • iostat:监控磁盘 IO 性能。
  • vmstat:查看虚拟内存使用情况。

例如,通过 top 命令查看压力测试过程中CPU 和内存的使用情况,可以帮助我们判断系统是否出现性能瓶颈。


总结

stress工具通过模拟高负载场景,帮助用户全面评估系统性能。无论是单独测试CPU、内存或磁盘IO,还是进行混合负载测试,stress都能提供灵活的参数配置。结合性能监控工具,用户可以快速发现系统瓶颈并进行针对性优化。希望本文档能为系统管理员和开发人员提供实用的参考,助力系统性能调优。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐