安装

#启用 EPEL 软件库,因为 Stress-ng 可以在 EPEL 软件库中找到。
yum install epel-release
#安装 Stress-ng
yum install stress-ng
#安装完成后,可以通过运行以下命令验证 Stress-ng 是否已成功安装
stress-ng --version

常用命令参数简介

  1. -c N--cpu N:创建 N 个进程,每个进程循环调用 sqrt 函数产生 CPU 压力。
  2. -I N--io N:创建 N 个进程,每个进程循环调用 sync 将内存缓冲区内容写到磁盘上,产生 IO 压力。
  3. -m N--vm N:创建 N 个进程,每个进程循环调用 malloc/free 函数分配和释放内存。
  4. --vm-bytes B:指定每个虚拟内存工作负载分配的内存大小。
  5. --vm-stride B:不断地给部分内存赋值,触发 COW (Copy On Write) 机制。
  6. --vm-hang N:在每个消耗内存的进程分配到内存后,让其睡眠 N 秒,然后释放内存,不断重复这个过程。
  7. --vm-keep:使虚拟内存工作负载保持占用内存,而不是不断释放并重新分配。
  8. -d N--hdd N:创建 N 个进程,每个进程不断执行 write 和 unlink 函数(创建文件,写入内容,删除文件)。
  9. --hdd-bytes B:指定写入文件的大小。
  10. --hdd-noclean:不要将写入随机 ASCII 数据的文件 unlink。
  11. -t N--timeout N:在 N 秒后结束程序。
  12. --backoff N:在开始运行前等待 N 微秒。
  13. -q--quiet:在运行过程中禁止输出信息。
  14. -n--dry-run:仅显示将要执行的操作,而不实际执行它们。
  15. --version:显示版本号。
  16. -v--verbose:显示详细信息。

3.测试

3.1. 系统进程间通信信号量压力测试

# 对系统进行进程间通信信号量的压力测试
stress-ng --cpu 8 --sem 80 --timeout 5m

以下是命令参数的详细解释:

  1. --cpu 8:创建 8 个 CPU 工作负载,每个进程循环调用 sqrt 函数产生 CPU 压力。
  2. --sem 80:创建 80 个信号量(semaphore)工作负载,每个进程使用 System V 信号量进行进程间通信。这将测试系统在处理信号量时的性能和稳定性。
  3. --timeout 5m:设置压力测试持续时间为 5 分钟。测试完成后,Stress-ng 将自动停止。

输出结果 image.png image.png 这两行输出的解释:

  1. stress-ng: info: [25173] dispatching hogs: 8 cpu, 80 sem:Stress-ng 正在启动所需的工作负载(称为 "hogs"),即 8 个 CPU 工作负载和 80 个信号量(semaphore)工作负载。[25173] 是该 Stress-ng 进程的进程 ID。
  2. stress-ng: info: [25173] successful run completed in 300.50s (5 mins, 0.50 secs):Stress-ng 已成功完成压力测试,用时 300.50 秒,即 5 分钟零 0.50 秒。

3.2. 进程间通信共享内存压力测试

#进程间通信共享内存压力测试
stress-ng --cpu 8 --shm 80 --timeout 5m

命令参数的详细解释:

  1. --cpu 8:创建 8 个 CPU 工作负载,每个进程循环调用 sqrt 函数产生 CPU 压力。
  2. --shm 80:创建 80 个共享内存(shared memory)工作负载,每个进程使用 System V 共享内存进行进程间通信。这将测试系统在处理共享内存时的性能和稳定性。
  3. --timeout 5m:设置压力测试持续时间为 5 分钟。测试完成后,Stress-ng 将自动停止。

结果输出 image.png image.png 内存不足,减小测试进程数 image.png