Stress-ng 系统压力测试工具教程

Stress-ng 是 Linux 下功能最全面的系统压力测试工具,支持超过 300 种不同的压力测试方法(stressors),涵盖 CPU、内存、磁盘 I/O、网络、文件系统、进程管理等多个维度。它是传统 stress 工具的增强版本,不仅能用于压力测试,还能输出性能度量数据用于对比分析。本文将介绍如何在搬瓦工 VPS 和 Linux 服务器上使用 stress-ng 进行全面的压力测试。

一、安装 Stress-ng

1.1 在 Ubuntu/Debian 上安装

apt update
apt install stress-ng -y
stress-ng --version

1.2 在 CentOS/RHEL 上安装

yum install epel-release -y
yum install stress-ng -y

1.3 从源码编译

apt install build-essential libattr1-dev libcap-dev libgcrypt-dev libbsd-dev libkeyutils-dev zlib1g-dev -y
git clone https://github.com/ColinIanKing/stress-ng.git
cd stress-ng
make -j$(nproc)
make install

二、CPU 压力测试

2.1 基本 CPU 压力

# 使用所有 CPU 核心进行压力测试,持续 60 秒
stress-ng --cpu $(nproc) --timeout 60s --metrics-brief

# 使用特定的 CPU 压力方法
stress-ng --cpu $(nproc) --cpu-method matrixprod --timeout 60s --metrics-brief

2.2 指定 CPU 负载百分比

# 限制 CPU 负载为 80%
stress-ng --cpu $(nproc) --cpu-load 80 --timeout 120s --metrics-brief

2.3 测试所有 CPU 压力方法

# 列出所有可用的 CPU 压力方法
stress-ng --cpu-method which

# 依次运行所有 CPU 方法(每种方法 10 秒)
stress-ng --cpu 1 --cpu-method all --timeout 10s --metrics-brief

三、内存压力测试

3.1 内存分配压力

# 启动 4 个内存压力进程,每个分配 256MB
stress-ng --vm 4 --vm-bytes 256M --timeout 60s --metrics-brief

# 使用 mmap 方式测试内存
stress-ng --mmap 4 --mmap-bytes 256M --timeout 60s --metrics-brief

3.2 内存带宽测试

# 测试内存带宽
stress-ng --memrate 1 --memrate-bytes 1G --timeout 60s --metrics-brief

3.3 缓存压力测试

# L1/L2/L3 缓存压力测试
stress-ng --cache $(nproc) --timeout 60s --metrics-brief

四、磁盘 I/O 压力测试

4.1 顺序 I/O 压力

# 启动 4 个 I/O 压力进程
stress-ng --io 4 --timeout 60s --metrics-brief

# HDD 顺序读写压力
stress-ng --hdd 2 --hdd-bytes 1G --timeout 60s --metrics-brief

4.2 随机 I/O 压力

# 文件系统压力测试
stress-ng --filesystem 4 --timeout 60s --metrics-brief

# 随机 seek 压力
stress-ng --seek 4 --seek-size 1G --timeout 60s --metrics-brief

4.3 同步写入压力

# 同步写入压力(模拟数据库写入)
stress-ng --sync-file 2 --timeout 60s --metrics-brief

五、网络压力测试

# Socket 压力测试
stress-ng --sock 4 --timeout 60s --metrics-brief

# UDP 网络压力
stress-ng --udp 4 --timeout 60s --metrics-brief

# TCP 网络压力
stress-ng --sockmany 1 --timeout 60s --metrics-brief

六、综合压力测试

6.1 全系统压力

# 同时对 CPU、内存、磁盘和网络施压
stress-ng --cpu 2 --vm 2 --vm-bytes 256M --hdd 2 --io 2 --timeout 120s --metrics-brief

6.2 类别化压力测试

# 运行所有 CPU 类压力测试
stress-ng --class cpu --sequential 1 --timeout 10s --metrics-brief

# 运行所有内存类压力测试
stress-ng --class memory --sequential 1 --timeout 10s --metrics-brief

# 运行所有 I/O 类压力测试
stress-ng --class io --sequential 1 --timeout 10s --metrics-brief

6.3 随机压力测试

# 随机选择 8 种压力方法同时运行
stress-ng --random 8 --timeout 120s --metrics-brief

七、输出和监控

7.1 YAML 格式输出

# 输出详细结果到 YAML 文件
stress-ng --cpu $(nproc) --timeout 60s --metrics-brief --yaml output.yaml

7.2 JSON 格式输出

# 输出 JSON 格式
stress-ng --cpu $(nproc) --timeout 60s --metrics-brief --json-file output.json

7.3 配合 top 监控

# 在另一个终端监控系统资源
top -d 1

# 或使用 vmstat 实时监控
vmstat 1

# 或使用 dstat 综合监控
dstat --cpu --mem --disk --net 1

八、VPS 稳定性测试脚本

#!/bin/bash
echo "===== VPS 稳定性压力测试 ====="
echo "测试时间: $(date)"
echo "预计耗时: 约 10 分钟"
echo ""

echo "--- 第 1 阶段:CPU 压力测试(2 分钟)---"
stress-ng --cpu $(nproc) --timeout 120s --metrics-brief 2>&1 | tail -5

echo "--- 第 2 阶段:内存压力测试(2 分钟)---"
stress-ng --vm 2 --vm-bytes 75% --timeout 120s --metrics-brief 2>&1 | tail -5

echo "--- 第 3 阶段:磁盘 I/O 压力测试(2 分钟)---"
stress-ng --hdd 2 --hdd-bytes 512M --timeout 120s --metrics-brief 2>&1 | tail -5

echo "--- 第 4 阶段:综合压力测试(3 分钟)---"
stress-ng --cpu 2 --vm 1 --vm-bytes 256M --hdd 1 --io 1 --timeout 180s --metrics-brief 2>&1 | tail -10

echo ""
echo "所有测试完成!如果没有报错或崩溃,说明系统稳定性良好。"
echo "完成时间: $(date)"

九、注意事项

  • 生产环境慎用:压力测试会消耗大量系统资源,不要在正在运行业务的服务器上进行。
  • 监控温度:长时间高负载压力测试可能导致服务器过热,注意监控 CPU 温度。
  • VPS 限制:部分 VPS 提供商会限制持续高 CPU 使用率,测试时间不宜过长。
  • 磁盘空间:磁盘压力测试会创建临时文件,确保有足够的可用空间。
  • OOM Killer:内存压力测试可能触发 Linux 的 OOM Killer,建议控制内存使用量不超过总内存的 80%。

总结

Stress-ng 是验证系统稳定性最全面的压力测试工具。通过对 CPU、内存、磁盘和网络的持续压力施加,可以发现系统在高负载下的潜在问题。如果你需要更精确的性能数据,可以配合 SysbenchFio 进行基准测试。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的优惠,通过 bwh81.net 进入官网购买。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。