当前位置: 首页 > news >正文

stress 和 stress-ng(增强版) -压力测试工具

stress 是一个 Linux/Unix 下的 压力测试工具,可以模拟 CPU、内存、I/O 和磁盘的高负载情况,用于测试系统稳定性和性能。它支持多种资源类型的压力测试,并允许自定义负载强度和持续时间。


stress 的主要功能

功能说明
CPU 负载模拟高 CPU 使用率(多核支持)
内存负载占用指定大小的内存(可测试 OOM Killer)
I/O 负载模拟磁盘读写压力
磁盘负载创建并写入临时文件(测试存储性能)
多线程负载支持多进程并发测试
超时控制可设定测试运行时间

安装 stress

Debian/Ubuntu

sudo apt update && sudo apt install stress

RHEL/CentOS

sudo yum install stress

Arch Linux

sudo pacman -S stress

macOS (Homebrew)

brew install stress

stress 使用方法

1. 基本语法

stress [OPTIONS] [--timeout SECONDS]
  • --timeout:运行指定时间后自动停止(单位:秒)。


2. 模拟 CPU 负载

(1) 单核 100% 占用
stress --cpu 1
(2) 多核 100% 占用(使用所有 CPU 核心)
stress --cpu $(nproc)  # nproc 返回 CPU 核心数
(3) 运行 30 秒后自动停止
stress --cpu 4 --timeout 30s  # 4 个核心,30 秒后停止

查看 CPU 使用率

top  # 或 htop, mpstat -P ALL

3. 模拟内存负载

(1) 占用 1GB 内存
stress --vm 1 --vm-bytes 1G
(2) 占用 2GB 内存,并持续 60 秒
stress --vm 2 --vm-bytes 2G --timeout 60s

查看内存使用

free -h  # 或 top

注意:如果内存不足,系统可能会触发 OOM Killer 杀死进程。


4. 模拟 I/O 负载

(1) 生成 2 个 I/O 压力进程
stress --io 2
(2) 运行 20 秒后停止
stress --io 4 --timeout 20s

查看 I/O 负载

iotop  # 或 vmstat 1

5. 模拟磁盘负载

(1) 创建 1 个进程,写入 500MB 临时文件
stress --hdd 1 --hdd-bytes 500M
(2) 创建 3 个进程,每个写入 1GB 文件,运行 30 秒
stress --hdd 3 --hdd-bytes 1G --timeout 30s

查看磁盘 I/O

iostat -x 1  # 或 dstat

6. 组合测试(CPU + 内存 + I/O)

stress --cpu 4 --io 2 --vm 2 --vm-bytes 1G --timeout 60s
  • --cpu 4:4 个 CPU 核心满载

  • --io 2:2 个 I/O 压力进程

  • --vm 2 --vm-bytes 1G:2 个进程,每个占用 1GB 内存

  • --timeout 60s:60 秒后自动停止


stress 高级用法

1. 显示详细输出(-v

stress -v --cpu 2 --timeout 10s

输出示例:

stress: info: [PID] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [PID] successful run completed in 10s

2. 后台运行(&

stress --cpu 4 --timeout 300s &

终止后台任务

pkill stress  # 或 kill -9 <PID>

3. 限制 CPU 占用率(--cpu-load

默认 stress 会让 CPU 100% 占用,但可以指定百分比(仅部分版本支持):

stress --cpu 2 --cpu-load 50  # 每个核心 50% 占用

stress vs stress-ng

stress 是较旧的工具,而 stress-ng 是增强版,支持更多测试模式:

sudo apt install stress-ng  # 安装 stress-ng
stress-ng --cpu 4 --io 2 --vm 2 --vm-bytes 1G --timeout 60s

总结

测试类型命令示例
CPU 负载stress --cpu 4
内存负载stress --vm 2 --vm-bytes 1G
I/O 负载stress --io 2
磁盘负载stress --hdd 1 --hdd-bytes 500M
组合测试stress --cpu 4 --io 2 --vm 1 --vm-bytes 512M --timeout 30s
后台运行stress --cpu 2 &
终止测试pkill stress

stress 适用于:

  • 测试系统稳定性

  • 模拟高负载环境

  • 触发 OOM Killer 测试

  • CPU/内存/I/O 性能基准测试

stress-ng 

stress-ng 是 Linux 下功能强大的 压力测试工具,相比 stress,它支持更丰富的测试模式(CPU、内存、I/O、缓存、内核等),并提供了更精细的控制选项。


1. 安装 stress-ng

Debian/Ubuntu

sudo apt update && sudo apt install stress-ng

RHEL/CentOS

sudo yum install stress-ng  # EPEL 仓库需先启用

Arch Linux

sudo pacman -S stress-ng

macOS (Homebrew)

brew install stress-ng

2. 基本语法

stress-ng [OPTIONS] [--metrics-brief] [--timeout T]
  • --metrics-brief:测试结束后显示简要统计信息。

  • --timeout T:运行 T 秒后自动停止(支持 10s5m 等格式)。


3. 常用压力测试场景

(1) CPU 压力测试

所有 CPU 核心满载
stress-ng --cpu $(nproc) --timeout 60s
指定 CPU 核心数
stress-ng --cpu 4 --timeout 30s  # 使用 4 个核心
指定 CPU 负载百分比
stress-ng --cpu 2 --cpu-load 50  # 每个核心 50% 负载
特定 CPU 算法测试
stress-ng --cpu 4 --cpu-method matrixprod  # 矩阵乘法测试

支持的 --cpu-method 方法:

all | bitops | callfunc | crypto | hamming | matrixprod | ...

(2) 内存压力测试

占用 2GB 内存
stress-ng --vm 2 --vm-bytes 2G --timeout 60s
内存读写混合测试
stress-ng --vm 4 --vm-bytes 1G --vm-method rowhammer

支持的 --vm-method 方法:

all | flip | rowhammer | prime-0 | prime-1 | ...

(3) 磁盘 I/O 压力测试

写入临时文件
stress-ng --io 4 --hdd 1 --hdd-bytes 1G  # 4个IO进程 + 1个磁盘写入
文件系统压力测试
stress-ng --temp-path /mnt/test --hdd 2 --hdd-bytes 500M

(4) 缓存/分支预测测试

stress-ng --cache 2 --cache-level 1  # L1 缓存测试
  • --cache-level:支持 1(L1)、2(L2)、3(L3)。


(5) 综合压力测试

stress-ng --cpu 4 --io 2 --vm 2 --vm-bytes 1G --hdd 1 --timeout 5m
  • --cpu 4:4 个 CPU 核心满载。

  • --io 2:2 个 I/O 进程。

  • --vm 2 --vm-bytes 1G:2 个进程占用 1GB 内存。

  • --hdd 1:1 个磁盘写入进程。


4. 高级功能

(1) 显示详细统计

stress-ng --cpu 2 --io 1 --metrics-brief --timeout 10s

输出示例:

metrics: 10s: CPU: 98% user, 2% kernel, 0% idle

(2) 绑定到特定 CPU 核心

stress-ng --cpu 2 --taskset 0,1  # 仅使用 CPU0 和 CPU1

(3) 限制测试进程优先级

stress-ng --cpu 4 --ionice-class idle  # 最低 I/O 优先级

(4) 模拟 OOM(内存耗尽)

stress-ng --vm 8 --vm-bytes 90% --oomable  # 占用 90% 内存

(5) 测试指定时间并生成报告

stress-ng --cpu 4 --timeout 60s --metrics --log-file report.txt

5. 支持的完整测试类型

查看所有支持的测试模式:

stress-ng --class overview  # 显示所有测试类别

或列出具体方法:

stress-ng --cpu-method list  # 所有 CPU 测试方法
stress-ng --vm-method list   # 所有内存测试方法

6. 停止测试

  • 手动终止

    pkill stress-ng  # 或 kill -9 <PID>
  • 自动停止:通过 --timeout 设置运行时间。


7. 典型用例

场景命令
CPU 满载测试stress-ng --cpu $(nproc) --timeout 5m
内存带宽测试stress-ng --vm 4 --vm-bytes 2G --vm-method all
磁盘 I/O 压测stress-ng --io 8 --hdd 2 --hdd-bytes 500M
L1 缓存测试stress-ng --cache 2 --cache-level 1
综合负载测试stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 10m

8. 注意事项

  1. 谨慎使用:避免在生产环境长时间运行,可能导致系统崩溃。

  2. 监控工具:建议配合 tophtopvmstat 监控系统状态。

  3. 硬件保护:高温或高负载可能损坏硬件,确保散热良好。


总结

stress-ng 是比 stress 更强大的压力测试工具,适合:

  • 系统稳定性测试

  • 硬件性能基准测试

  • 内核/驱动问题复现

  • 模拟极端负载场景

相关文章:

  • linux挂载磁盘
  • Go 语言标准库中database模块详细功能介绍与示例
  • Ingredient-oriented Multi-Degradation Learning for Image Restoration论文阅读
  • git:远程仓库拉取到本地,fork到本地,修改后再上传
  • 【每日论文】Qwen2.5-Omni Technical Report
  • 前端性能优化思路_场景题
  • C#Lambda表达式与委托关系
  • 平台清洗行动:AI浏览器用户生存率高出传统方案17倍
  • Gradle实战指南:从入门到进阶,与Maven的深度对比
  • -PHP 应用SQL 二次注入堆叠执行DNS 带外功能点黑白盒条件
  • 人工智能算法、模型、框架
  • 剑指Offer35- - 链表
  • 【剪辑_BGM 记录】
  • matplotlib学习
  • MySQL INSERT 语句:当记录不存在时插入
  • Centos7 安装 TDengine
  • springMVC中转发和重定向的简介及写法
  • TextGrad:案例
  • 生成信息提取的大型语言模型综述
  • Java异常架构
  • 海南保亭警方通报“两飞车党紧追女童”:两名初中生认错道歉
  • 浙江广厦:诚挚道歉,涉事责任人交公安机关
  • 梅花奖在上海|秦海璐:演了15年《四世同堂》,想演一辈子
  • 北方首场高温将进入鼎盛阶段,江南华南多地需警惕降雨叠加致灾
  • 习近平向第三十四届阿拉伯国家联盟首脑理事会会议致贺信
  • 中央提级巡视后,昆明厅官郭子贞接受审查调查