- 安装方法
• Ubuntu/Debian:
sudo apt update && sudo apt install stress-ng -y
• CentOS/RHEL(需EPEL源):
sudo yum install epel-release -ysudo yum install stress-ng -y
• 源码编译(适合定制化需求):
wget https://fossies.org/linux/privat/stress-ng-最新版本.tar.gztar -xzf stress-ng-*.tar.gzcd stress-ng-*make && sudo make install#验证安装:stress-ng --version
- 核心功能与命令
CPU压力测试,模拟服务器cpu使用率100%
• 基础命令(满载所有CPU):
# $(nproc)指的是服务器核数,如有8个核,就写8,全部占满
stress-ng --cpu $(nproc) --timeout 60s
• 控制负载百分比(如70%利用率):
stress-ng --cpu 4 --cpu-load 70 --timeout 2m
• 指定算法(如矩阵乘法、FFT):
stress-ng --cpu 4 --cpu-method matrixprod --timeout 600s # 矩阵运算stress-ng --cpu 4 --cpu-method fft --timeout 2m # 快速傅里叶变换
通过top或htop监控CPU占用。
内存压力测试
• 动态分配内存(默认反复分配/释放):
stress-ng --vm 4 --vm-bytes 1G --timeout 100sstress-ng --vm 4 --vm-bytes 1G --timeout 100s --vm-hang 100s
timeout和vm-hang参数说明:
1. --timeout(全局超时)作用范围:控制整个压力测试进程的运行时长。
行为:
指定测试的总持续时间(例如 100s 表示 100 秒)。
时间到达后,所有压力测试子进程(包括 CPU、内存、I/O 等)均会强制终止,测试结束。示例:
--timeout 100s 表示整个测试会在 100 秒后自动停止。2. --vm-hang(内存测试局部挂起)作用范围:仅针对内存压力测试子进程(由 --vm 创建的进程)。
行为:内存子进程在每次分配内存(malloc)后,会挂起(睡眠)指定时长(例如 100s),期间不释放内存。
挂起结束后,释放内存并重新开始分配-挂起循环,直到全局 --timeout 触发终止。目的:模拟内存被长期占用的场景(如内存泄漏或缓存驻留),而非频繁分配/释放。
• 持续占用内存(避免释放):
stress-ng --vm 2 --vm-bytes 2G --vm-keep --timeout 5m
• 内存加压后休眠(低CPU占用):
stress-ng --vm 4 --vm-bytes 512M --vm-hang 30 --timeout 2m
使用free -h或vmstat监控内存使用。
磁盘I/O测试
• 同步I/O压力(频繁调用sync):
stress-ng --io 4 --timeout 60s
• 文件读写压力(创建/删除大文件):
stress-ng --hdd 3 --hdd-bytes 20G --timeout 180s # 写入20GB文件
# 也可以使用dd命令,创建名为test*.txt的文件,如test1.txt,创建50个,每个文件20G,共1000G
dd if=/dev/zero of=test%s.txt count=50 bs=20G
监控工具:iostat或iotop。
• 混合负载测试
stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 300s
同时加压CPU、I/O和内存,模拟复杂场景。
- 高级参数与场景
• 超时控制:
–timeout支持单位(s/m/h),如–timeout 1h30m。
• 性能指标输出:
–metrics-brief输出测试摘要(如bogo操作次数):
stress-ng --cpu 4 --timeout 60s --metrics-brief
• 自定义测试时长:
通过–vm-ops或–cpu-ops按操作次数结束测试:
stress-ng --hdd 5 --hdd-ops 100000 # 完成10万次操作后停止
• 低负载模拟(开发调试):
stress-ng --cpu 2 --cpu-load 30 --timeout 10m # 30%低负载
-
使用注意事项
-
避免生产环境直接使用:
压力测试可能导致系统崩溃或数据丢失,建议在虚拟机或测试环境中操作。 -
资源分配建议:
• 内存测试时,分配量不超过总内存的80%(避免OOM Kill)。• 磁盘测试预留足够空间(如–hdd-bytes值需小于磁盘剩余容量)。
-
监控关键指标:
• CPU/内存:top、htop、free。• 磁盘I/O:iostat -dx 1。
• 温度:sensors(防止过热)。
-
性能影响分析:
• CPU加压对应用延迟影响显著(如8核满载时小模型延迟增加5倍)。• 内存加压对延迟影响较小,但高占用时仍会降低整体性能。
-
典型应用场景
• 服务器稳定性验证:
混合负载测试72小时,观察内核错误或硬件故障。
• 资源竞争模拟:
在部署新服务前,模拟高负载下现有服务的性能表现。
• 开发板压力测试:
ARM平台交叉编译后验证硬件可靠性(如自动驾驶芯片)。
• 散热能力测试:
结合cpuburn工具最大化CPU发热,检测散热系统。
⚠️ 重要提示:测试结束后,用killall stress-ng或pkill stress-ng确保进程完全退出,避免残留负载。
更多参数详见手册:man stress-ng 或 https://github.com/ColinIanKing/stress-ng。