因为项目需要,接触到了两款压力测试工具,对其进行总结和学习。

1) LTP

简介:

    LTP套件是由 Linux Test Project 所开发的一套系统测试套件。它基于系统资源的利用率统计开发了一个测试的组合,为系统提供足够的压力。

    通过压力测试来判断系统的稳定性和可靠性。

    压力测试是一种破坏性的测试,即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行,是系统在正常的情况下对某种负载强度的承受能力的考验 。

    使用LTP测试套件对Linux操作系统进行超长时间的测试,重点在于Linux用户环境相关的工作负荷。而并不是致力于证明缺陷。

下载链接

https://github.com/linux-test-project/ltp/releases/tag/20200120

压力测试

       可以验证产品在系统高使用率时的健壮性。作为runalltests.sh的补充,特别设计了一个名为ltpstress.sh的测试场景,在使用网络与内存管理的同时并行地运行大范围的内核组件,并在测试系统上生成高压力负荷。

       ltpstress.sh也是LTP测试套件的一部分。这个脚本并行地运行相似的测试用例,串行地运行不同的测试用例,这样做是为了避免由于同时访问同一资源或者互相干扰而引起的间歇性故障。

默认地,这个脚本执行:

- NFS 压力测试。

- 内存管理压力测试。

- 文件系统压力测试。

- 数学 (浮点) 测试。

- 多线程压力测试。

- 硬盘 I/O 测试。

- IPC (pipeio, semaphore) 测试。

- 系统调用功能的验证测试。

- 网络压力测试。

LTP工作组在设计Linux 内核压力测试脚本 ltpstress.sh 时使用了这一设计方法,为给系统提供足够的压力,LTP工作组对这个组合测试进行了分析,以确定 Linux 内核的哪些部分在测试执行中得到了使用。然后,修改了组合测试,在保持期望的高强度系统压力的同时提高代码覆盖率的百分比。最终得到的压力测试涵盖了Linux 内核的足够多部分,有助于稳定性声明,并且有系统使用情况和内核代码覆盖情况的数据来支持它。

测试当中的注意项

1 测试之前所有选定的测试系统的硬件配置尽可能相同。去掉额外的硬件以减少潜在的硬件故障。在映像安装过程中选择最低的安全选项。预留至少 2 GB 的硬盘空间以保存 top 数据文件和 LTP 日志文件。

比如:不建议插入U盘测试,可能会带来干扰;(实测在此情况下出现了死机,但是不知道是不是必然联系)。

2 在测试期间系统不要受到干扰。偶尔访问一下系统以确认测试仍在进行是可以接受的。确认的手段包括使用 ps 命令、检查 top 数据和检查 LTP 日志数据。

源安装包目录列表

doc: 该目录是说明文件和帮助文档的所在地,这个目录中对LTP的内容和每个工具都有详细的说明

testscripts: 该目录中存储的是可执行的测试脚本,不同方面的测试脚本的集合

testcases: 该目录存储了所有LTP测试套件中所使用的测试用例的源码

runtest: 该目录中的每个文件都是要执行的测试用例的命令集合,每个文件针对测试的不同方面

(用于链接testscripts内的测试脚本和testcases测试项目)

include: LTP测试套件的头文件目录,定义了LTP自身的数据结构和函数结构

lib: LTP测试套件运行时自身需要的库文件,定义了LTP自身的各种函数

bin: 存放LTP测试的一些辅助脚本

results: 测试结果默认存储目录

output: 测试日志默认存储目录

share: 脚本使用说明目录

pan: 该目录存储的是LTP测试套件的测试驱动程序pan

操作步骤

1、从上述链接中下载ltp的源码

需要注意的是最新的版本20200120 testscripts目录下没有上文提到的ltpstress.sh;可能是版本升级之后的测试方法不同。实测在20180525版本中有脚本ltpstress.sh。

2、解压、安装

进入解压后的脚本目录,执行./ltpstress.sh,执行压力测试。(需要添加额外的两个服务)

linux Gpu压力测试 gpu burn docker_压力测试

也有版本是将此部分服务添加到ltp压缩包中,通过make install 安装的。

2)stress 

Stress是一款Posix系统下生成Cpu/Menory/IO/Disk负载的工具。

  1. 测试CPU负荷
    输入命令:stress -c 4 -t 10
    增加4个cpu进程,处理sqrt()函数函数,以提高系统CPU负荷,测试10s
  2. 内存测试
    输入命令:stress -i 4 –vm 10 –vm-bytes 1G –vm-hang 100 –timeout 100s
    新增4个io进程,10个内存分配进程,每次分配大小1G,分配后不释放,测试100S
  3. 磁盘I/O测试
    输入命令:stress -d 1 –hdd-bytes 3G
    新增1个写进程,每次写3G文件块
  4. 硬盘测试(不删除)
    输入命令:stress -i 1 -d 10 –hdd-bytes 3G -hdd-noclean
    新增1个IO进程,10个写进程,每次写入3G文件块,且不清除,会逐步将硬盘耗尽

3)区别

1、ltpstress在做压力测试的时候,使用默认的脚本ltpstress.sh,CPU和内存会保持100%(满负荷)的压力测试;

      可以通过修改指定的内存参数,来降低CPU和内存的使用率,一般情况下也不这么使用。

      stress可以做满负荷的CPU测试,如4核,则 -c 4 CPU满负荷测试。如果要保证CPU占用率60以上,则可以设置-c 3(默认4核的情况下)。

      因此在做单项CPU压力测试的时候,可以选择stress,且容易控制CPU的占用率。

2、 stress可以做内存、硬盘、CPU的测试(或组合测试);全面系统长时间的压力测试选择LTP。