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
秒后自动停止(支持10s
、5m
等格式)。
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. 注意事项
-
谨慎使用:避免在生产环境长时间运行,可能导致系统崩溃。
-
监控工具:建议配合
top
、htop
、vmstat
监控系统状态。 -
硬件保护:高温或高负载可能损坏硬件,确保散热良好。
总结
stress-ng
是比 stress
更强大的压力测试工具,适合:
-
系统稳定性测试
-
硬件性能基准测试
-
内核/驱动问题复现
-
模拟极端负载场景