stress-ng
是一款功能强大的 Linux 系统压力测试工具,能够模拟多种复杂负载场景,覆盖 CPU、内存、磁盘 I/O、进程调度等核心资源,帮助开发者验证系统在高负载下的稳定性与性能表现。以下是其核心功能、参数解析及实战案例。
一、工具简介与安装
-
核心功能
- 多维度负载模拟:支持超过 80 种负载模式,包括浮点运算、内存分配、文件操作、网络压力等。
- 精准资源控制:可指定负载施加的 CPU 核心、内存大小、I/O 强度等。
- 跨平台兼容:支持 x86、ARM 等架构,适用于嵌入式系统到服务器级场景。
-
安装方法
- CentOS/RHEL:
sudo yum install -y epel-release.noarch sudo yum install stress-ng
- 手动编译:
从 GitHub 仓库 获取源码编译,支持自定义功能。
- CentOS/RHEL:
二、核心参数解析
参数 | 说明 |
---|---|
-c N | 启动 N 个 CPU 压力进程(默认使用 sqrt 计算模拟负载) |
-m N | 启动 N 个内存压力进程,默认分配 256MB/进程(可结合 --vm-bytes 调整) |
-i N | 启动 N 个 I/O 压力进程,模拟频繁的 sync() 操作 |
-d N | 启动 N 个磁盘压力进程,生成临时文件并循环读写 |
--cpu-method | 指定 CPU 负载算法,如 matrix (矩阵运算)、trig (三角函数)等 |
--timeout T | 指定压测持续时间(单位:秒),如 --timeout 600 表示运行 10 分钟 |
--taskset M | 将压力绑定到指定 CPU 核心(如 --taskset 0,2 表示仅使用 CPU 0 和 2) |
常用组合示例:
stress-ng -c 4 -m 2 -i 1 --timeout 300 # 模拟 4 CPU 负载 + 2 内存负载 + 1 I/O 负载,持续 5 分钟
三、实战案例与监控方法
-
场景 1:CPU 满载测试
stress-ng --cpu 4 --cpu-method matrix --timeout 600 # 4 个进程执行矩阵运算,持续 10 分钟
- 监控命令:
mpstat -P ALL 2 # 每 2 秒显示各 CPU 核心利用率
- 结果分析:若所有核心
%usr
接近 100%,表明 CPU 压力生效 。
- 监控命令:
-
场景 2:内存与磁盘混合压力
stress-ng --vm 2 --vm-bytes 1G --hdd 1 --hdd-bytes 5G --timeout 120
- 参数说明:
--vm 2
:启动 2 个内存进程,每个分配 1GB 内存(默认行为为频繁写入并释放)。--hdd 1
:启动 1 个磁盘进程,生成 5GB 临时文件并循环读写 。
- 监控指标:
free -h
:观察可用内存变化。iostat -dx 2
:监控磁盘吞吐量(wkB/s
)和利用率(%util
) .
- 参数说明:
-
场景 3:指定 CPU 核心压测
stress-ng --taskset 0,1 --cpu 2 --cpu-load 80 # 在 CPU 0 和 1 上施加 80% 负载
- 适用场景:测试 CPU 核心隔离或 NUMA 架构性能差异 。
四、注意事项与优化建议
-
谨慎使用:
- 避免在生产环境直接运行,可能导致系统崩溃或数据丢失。
- 部分测试模式(如内存加压)可能触发 OOM Killer,需提前调整内核参数。
-
稳定性验证:
- 日志记录:添加
--log-file
参数保存压测日志,便于后期分析。 - 超时设置:始终指定
--timeout
防止压测进程失控。
- 日志记录:添加
-
性能调优:
- 硬件匹配:根据磁盘类型(HDD/SSD)调整 I/O 负载强度。
- 负载均衡:多节点测试时,结合
--taskset
分配压力
五、应用场景总结
- 系统稳定性测试:模拟极端负载,验证服务器长期运行的可靠性。
- 资源分配验证:测试容器(如 Docker/K8s)的 CPU、内存配额是否生效。
- 硬件故障排查:结合高负载测试,识别硬件(如内存条、磁盘)潜在缺陷。
- 性能优化基准:对比优化前后的系统表现(如调整调度算法后的延迟变化)。
通过灵活配置 stress-ng
参数,开发者可以精准模拟各类负载场景,为系统优化与容量规划提供数据支撑。建议结合 sysstat
(如 mpstat
、iostat
)或 htop
等工具实时监控资源使用情况。