Linux(十七)——系统压力测试工具stress使用指南
文章目录
前言
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-stride 值 | CPU 负载倾向 | 内存行为 | 适用场景 |
|---|---|---|---|
| 小(如 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都能提供灵活的参数配置。结合性能监控工具,用户可以快速发现系统瓶颈并进行针对性优化。希望本文档能为系统管理员和开发人员提供实用的参考,助力系统性能调优。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)