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 更强大的压力测试工具,适合:

  • 系统稳定性测试

  • 硬件性能基准测试

  • 内核/驱动问题复现

  • 模拟极端负载场景

多进程并发测试方法

(1) 多进程 CPU 并发测试
  • 让所有 CPU 核心满载(每个核心启动一个进程):

    stress --cpu $(nproc) --timeout 60s
    • $(nproc):自动获取 CPU 核心数。

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

  • 手动指定进程数(如 8 个进程):

    stress --cpu 8 --timeout 30s
(2) 多进程内存并发测试
  • 启动 4 个进程,每个占用 1GB 内存

    stress --vm 4 --vm-bytes 1G --timeout 60s
    • --vm 4:4 个内存压力进程。

    • --vm-bytes 1G:每个进程分配 1GB 内存。

(3) 多进程 I/O 并发测试
  • 启动 2 个 I/O 密集型进程

    stress --io 2 --timeout 30s
(4) 多进程磁盘写入测试
  • 启动 3 个进程,每个写入 500MB 文件

    stress --hdd 3 --hdd-bytes 500M --timeout 60s

3. 综合多资源类型并发测试

同时测试 CPU、内存、I/O 和磁盘,模拟复杂负载:

stress --cpu 4 --io 2 --vm 2 --vm-bytes 1G --hdd 1 --hdd-bytes 2G --timeout 5m
  • 参数解析

    • --cpu 4:4 个 CPU 压力进程。

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

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

    • --hdd 1 --hdd-bytes 2G:1 个磁盘写入进程,写入 2GB 文件。

    • --timeout 5m:运行 5 分钟后自动停止。


4. 监控多进程并发效果

使用工具实时观察系统资源占用:

(1) 查看 CPU 和内存使用
top  # 按 `P` 按 CPU 排序,按 `M` 按内存排序
(2) 查看 I/O 负载
iotop  # 需要 root 权限
(3) 查看磁盘 I/O
iostat -x 1  # 每秒刷新磁盘 I/O 统计

5. 停止压力测试

(1) 手动停止所有进程
pkill stress  # 终止所有 stress 进程
(2) 停止指定资源类型的进程
pkill -f "stress --cpu"  # 终止所有 CPU 压力进程

6. 高级用法:多进程绑定到指定 CPU 核心

使用 taskset 将压力进程绑定到特定 CPU 核心(需安装 util-linux):

stress --cpu 2 --timeout 60s &          # 进程 1,默认随机分配核心
taskset -c 0,1 stress --cpu 2 --timeout 60s &  # 进程 2,绑定到 CPU0 和 CPU1

7. 多进程测试场景示例

场景命令
模拟高并发 Web 服务器stress --cpu 8 --io 4 --vm 4 --vm-bytes 512M --timeout 10m
数据库负载测试stress --cpu 4 --hdd 2 --hdd-bytes 1G --io 2 --timeout 30m
内存泄漏模拟stress --vm 8 --vm-bytes 2G --vm-keep --timeout 0(手动终止)

8. 注意事项

谨慎使用:避免在生产环境无限制运行,可能导致系统崩溃。

散热检查:高负载下确保硬件散热良好。

结果分析:结合 dmesgsar 等工具分析系统日志和性能数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值