系统压力测试助手——stress-ng

1、背景

在系统性能测试和压力测试中,stress-ng 是一个非常强大的工具,广泛应用于对 Linux 系统进行各种硬件和软件方面的负载测试。它能够模拟多种极端负载情况,帮助开发人员和运维人员检查系统在高负载下的表现,以便发现潜在的瓶颈和稳定性问题。

2、stress-ng简介及安装

stress-ng 是一个强大的工具,它通过生成各种计算密集型、内存密集型、I/O 密集型等工作负载,来模拟不同类型的压力测试。stress-ng 可以对 CPU、内存、磁盘、网络等硬件资源施加负载,从而测试系统在极端负载下的稳定性和性能。stress-ng 的优势在于它能够产生各种类型的负载,并且能够通过多种方式配置负载的强度、持续时间等。它支持对单个组件(如 CPU、内存、磁盘等)进行压力测试,也支持对系统的多种资源进行综合测试。安装方式如下:

bash 复制代码
sudo apt update
sudo apt install stress-ng

3、stress-ng的基本使用

stress-ng 通过命令行界面提供了丰富的选项来控制压力测试的类型和强度。最基本的用法是直接启动一个测试任务,如下所示:

bash 复制代码
stress-ng --cpu 4 --timeout 60s

在这个示例中,stress-ng 会对 4 个 CPU 核心施加压力,并且在 60 秒后自动结束测试。以下是常见的一些选项说明。

3.1、--cpu

该选项指定要使用的 CPU 核心数, 表示核心数。例如,--cpu 4 表示对 4 个 CPU 核心进行压力测试。如果你希望让所有可用的 CPU 核心都参与测试,可以使用 --cpu 不带参数:

bash 复制代码
stress-ng --cpu 0 --timeout 60s

3.2、--timeout <时间>

--timeout 选项用于指定压力测试的持续时间。你可以指定秒数(如 60s)、分钟数(如 10m)或小时数(如 1h)

bash 复制代码
stress-ng --cpu 4 --timeout 5m

3.3、--io

该选项指定 I/O 密集型操作的数量。例如,--io 4 会启动 4 个 I/O 操作来增加系统的 I/O 压力。I/O 操作可能包括读写磁盘、网络通信等。

bash 复制代码
stress-ng --io 4 --timeout 10m

3.4、--vm

--vm 用于测试系统的内存压力, 表示要启动的虚拟内存分配任务的数量。这个选项会导致 stress-ng 不断分配和释放内存,从而消耗内存资源。

bash 复制代码
stress-ng --vm 2 --vm-bytes 512M --timeout 10m

在这个示例中,stress-ng 启动了 2 个虚拟内存任务,每个任务分配 512MB 的内存,并持续 10 分钟。

3.5、--cpu-method <方法>

--cpu-method 选项允许你选择不同的 CPU 压力测试方法。例如,stress-ng 提供了几种不同的算法,使用这些算法可以模拟不同的 CPU 负载行为。

bash 复制代码
stress-ng --cpu 4 --cpu-method matrixprod --timeout 10m

常见的 CPU 测试方法包括:

  • default:默认方法
  • matrixprod:矩阵乘法
  • fft:快速傅立叶变换
  • prime:素数计算

3.6、--load

--load 选项用于指定要施加的负载量。例如,--load 100 表示将 CPU 负载保持在 100%(最大负载)。可以结合 --cpu 使用来指定负载的大小。

bash 复制代码
stress-ng --cpu 4 --load 100 --timeout 10m

3.7、--hdd

--hdd 选项用于测试硬盘压力, 表示要启动的硬盘操作数量。这些操作包括磁盘的读写操作,模拟磁盘繁忙的工作场景。

bash 复制代码
stress-ng --hdd 2 --timeout 5m

3.8、--network

如果你希望对网络性能施加压力,可以使用 --network 选项, 表示要启动的网络操作数。该选项用于模拟网络负载。

bash 复制代码
stress-ng --network 2 --timeout 5m

3.9、--cpu 0 --all(综合测试)

stress-ng 的强大之处在于它可以同时施加多种类型的负载。你可以通过 --all 选项同时对所有可用的资源进行压力测试:

bash 复制代码
stress-ng --cpu 0 --io 4 --vm 2 --timeout 10m

4、stress-ng的高级使用

4.1、多线程测试

stress-ng 允许对多线程进行压力测试,可以通过 --cpu-method 配合 --cpu 来控制每个线程的负载。以下是一个多线程的测试示例:

bash 复制代码
stress-ng --cpu 4 --cpu-method fft --timeout 10m

在这个例子中,stress-ng 会利用 4 个 CPU 核心,执行快速傅立叶变换(FFT)算法,模拟计算密集型负载。

4.2、内存压力测试

内存是系统中非常关键的资源之一,stress-ng 可以通过模拟内存分配和释放来测试内存的负载情况。以下是一个常见的内存压力测试命令:

bash 复制代码
stress-ng --vm 4 --vm-bytes 1G --timeout 5m

这个命令会启动 4 个虚拟内存任务,每个任务分配 1GB 的内存,持续 5 分钟。这种测试通常用于检查系统在高内存负载下的表现。

4.3、监控测试过程

在进行压力测试时,可以使用 stress-ng 的 --metrics-brief 选项来获取实时的性能指标,帮助你实时监控系统状态:

bash 复制代码
stress-ng --cpu 4 --timeout 10m --metrics-brief

这个命令会在测试过程中实时输出系统的性能数据,例如 CPU 使用率、内存占用等。

相关推荐
kunkun1012 天前
关于软件测试中的bug
python·bug·压力测试
程序员三藏4 天前
Jmeter简单的压力测试
自动化测试·软件测试·python·测试工具·jmeter·测试用例·压力测试
新兴ICT项目支撑8 天前
从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略
运维·服务器·压力测试
明月与玄武8 天前
面试常问的压力测试问题
面试·压力测试
周纠纠11 天前
【压力测试】
算法·压力测试
在线打码11 天前
SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析
spring boot·后端·功能测试·压力测试·postman
紫菜(Nori)11 天前
短连接服务器压测-wrk
服务器·压力测试
钱钱钱端12 天前
【压力测试】要不要做全链路压测?
自动化测试·软件测试·selenium·测试工具·jmeter·压力测试·测试工程师