stress-ng
stress-ng 是 Linux 下功能强大的 压力测试工具,相比 stress,它支持更丰富的测试模式(CPU、内存、I/O、缓存、内核等),并提供了更精细的控制选项。
安装 stress-ng
Debian/Ubuntusudo apt update && sudo apt install stress-ng
RHEL/CentOSsudo yum install stress-ng # EPEL 仓库需先启用
Arch Linuxsudo pacman -S stress-ng
macOS (Homebrew)brew install stress-ng
基本语法
stress-ng [OPTIONS] [–metrics-brief] [–timeout T]
–metrics-brief:测试结束后显示简要统计信息。
–timeout T:运行 T 秒后自动停止(支持 10s、5m 等格式)。
常用压力测试场景
(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 个磁盘写入进程。
高级功能
(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
支持的完整测试类型
查看所有支持的测试模式:
stress-ng --class overview # 显示所有测试类别或列出具体方法:
stress-ng --cpu-method list # 所有 CPU 测试方法
stress-ng --vm-method list # 所有内存测试方法停止测试
手动终止:pkill stress-ng # 或 kill -9
自动停止:通过 –timeout 设置运行时间。典型用例
场景 命令
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注意事项
谨慎使用:避免在生产环境长时间运行,可能导致系统崩溃。
监控工具:建议配合 top、htop、vmstat 监控系统状态。
硬件保护:高温或高负载可能损坏硬件,确保散热良好。
总结
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
综合多资源类型并发测试
同时测试 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 分钟后自动停止。
- 监控多进程并发效果
使用工具实时观察系统资源占用:
(1) 查看 CPU 和内存使用
top # 按 P 按 CPU 排序,按 M 按内存排序
(2) 查看 I/O 负载
iotop # 需要 root 权限
(3) 查看磁盘 I/O
iostat -x 1 # 每秒刷新磁盘 I/O 统计
停止压力测试
(1) 手动停止所有进程
pkill stress # 终止所有 stress 进程
(2) 停止指定资源类型的进程
pkill -f “stress –cpu” # 终止所有 CPU 压力进程高级用法:多进程绑定到指定 CPU 核心
使用 taskset 将压力进程绑定到特定 CPU 核心(需安装 util-linux):stress –cpu 2 –timeout 60s & # 进程 1,默认随机分配核心
taskset -c 0,1 stress –cpu 2 –timeout 60s & # 进程 2,绑定到 CPU0 和 CPU1多进程测试场景示例
场景 命令
模拟高并发 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(手动终止)注意事项
谨慎使用:避免在生产环境无限制运行,可能导致系统崩溃。
散热检查:高负载下确保硬件散热良好。
结果分析:结合 dmesg、sar 等工具分析系统日志和性能数据。
https://blog.csdn.net/songpeiying/article/details/146605371