下面是一个在 8 核心 CPU + 16 GB 内存的 Linux 系统上,将 CPU 和内存同时打满的压测脚本方案,使用 stress-ng
工具来实现。
为什么选择 stress-ng
- 它是一个功能全面、灵活、强大的系统压力测试工具;
- 支持对 CPU、内存、I/O 等子系统施加压力;
- 可指定占用全部核心,并控制内存使用量、执行时间等;
([LFCS认证备考电子书][1], [Ubuntu Wiki][2], [工具棚][3])
脚本示例:stress-test.sh
#!/bin/bash# 压力测试脚本:CPU + 内存满载DURATION="300s" # 持续时间(300秒 = 5分钟)
CPU_CORES=0 # 0 表示自动检测并使用所有在线 CPU
VM_INSTANCES=8 # 启动内存压力进程个数
VM_BYTES="12G" # 每个实例分配内存(总计约 96GB,系统会因超限导致页面交换)echo "Starting stress-ng: CPU + memory stress for $DURATION"
echo "CPU cores: all ($CPU_CORES), VM instances: $VM_INSTANCES, VM bytes: $VM_BYTES"sudo stress-ng \--cpu $CPU_CORES \--vm $VM_INSTANCES \--vm-bytes $VM_BYTES \--vm-hang 0 \--timeout $DURATION \--metrics-brief
脚本说明:
--cpu 0
:对所有核心施加 CPU 压力;--vm 8
+--vm-bytes 12G
:启动 8 个虚拟内存压力进程,每个分配 12 GB;
可根据实际内存进行调整,如--vm-bytes 50%
表示使用一半内存([工具棚][3], [Reddit][4]);--timeout
:指定压力持续时长;--metrics-brief
:输出简要的执行信息;--vm-hang 0
:防止内存释放,持续稳定压力。
使用步骤
-
安装
stress-ng
-
CentOS / RHEL / Fedora
sudo dnf install -y stress-ng
-
Debian / Ubuntu
sudo apt update && sudo apt install -y stress-ng
-
-
保存脚本并赋予执行权限
chmod +x stress-test.sh
-
执行脚本并观察效果
./stress-test.sh
-
监控系统负载,例如:
top swag -n 1 # An interactive monitor like htop 或 atop 也可
显著特性与风险
- 通过设置高于物理内存的
--vm-bytes
,可以强制系统使用 swap,从而引发系统 OOM 压力; - 脚本中使用的参数是激进的,请谨慎应用于生产环境;
- 如果要控制 CPU 占用百分比,可使用
--cpu-load P
,但多数场景还是全满更具测试意义([工具棚][3], [Server Fault][5])。