【转帖】Linux性能优化(一)——stress压力测试工具

linux,性能,优化,stress,压力,测试工具 · 浏览次数 : 0

小编点评

**一、stress简介** stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试。 **二、stress安装** ```sudo yum install stress ``` **三、stress使用** 1. 使用 `stress` 命令:`stress [OPTION [ARG]]` **四、CPU测试 stress --cpu 2 --timeout 60** 开启2个CPU进程执行sqrt计算,60秒后结束。 **五、IO测试 stress --io 2 --timeout 60s** 开启2个IO进程,执行sync系统调用,刷新内存缓冲区到磁盘。 **六、Memory测试 stress --vm 2 --vm-bytes 1G --vm-hang 100 --timeout 100s** 开启2个进程分配1GB内存,每次分配1GB内存,保持100秒后释放,100秒后退出。 **七、磁盘IO测试 stress --hdd 2 --hdd-bytes 10G --backoff 2000000** 开启2个磁盘IO进程,每次写10GB数据到磁盘。 **八、三、四、五、六、七、八三个测试场景的详细描述** 1. **CPU密集型进程**:模拟启动2个CPU密集型进程 uptime 查看系统平均负载。 2. **IO密集型进程**:模拟1个worker调用sync刷新内存缓冲区write到磁盘。 3. **等待CPU进程**:模拟4个逻辑CPU,模拟8个进程。

正文

https://blog.csdn.net/a642960662/category_11641226.html

一、stress简介

 1、stress简介

stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试。

2、stress安装

安装:

sudo yum install stress

二、stress使用

1、stress命令

stress [OPTION [ARG]]

-c, --cpu N:产生N个进程,每个进程都循环调用sqrt函数产生CPU压力。
-i, --io N:产生N个进程,每个进程循环调用sync将内存缓冲区内容写到磁盘上,产生IO压力。通过系统调用sync刷新内存缓冲区数据到磁盘中,以确保同步。如果缓冲区内数据较少,写到磁盘中的数据也较少,不会产生IO压力。在SSD磁盘环境中尤为明显,很可能iowait总是0,却因为大量调用系统调用sync,导致系统CPU使用率sys 升高。
-m, --vm N:产生N个进程,每个进程循环调用malloc/free函数分配和释放内存。
    --vm-bytes B:指定分配内存的大小
    --vm-stride B:不断的给部分内存赋值,让COW(Copy On Write)发生
    --vm-hang N :指示每个消耗内存的进程在分配到内存后转入睡眠状态N秒,然后释放内存,一直重复执行这个过程
    --vm-keep:一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)
-d, --hdd N:产生N个不断执行write和unlink函数的进程(创建文件,写入内容,删除文件)
    --hdd-bytes B:指定文件大小

--hdd-noclean:不要将写入随机ASCII数据的文件Unlink
-t, --timeout N:在N秒后结束程序        
--backoff N:等待N微秒后开始运行
-q, --quiet:程序在运行的过程中不输出信息
-n, --dry-run:输出程序会做什么而并不实际执行相关的操作
--version:显示版本号
-v, --verbose:显示详细的信息

2、CPU测试

stress --cpu 2 --timeout 60

开启2个CPU进程执行sqrt计算,60秒后结束

3、IO测试

stress --io 2 --timeout 60s

开启2个IO进程,执行sync系统调用,刷新内存缓冲区到磁盘

使用stress无法模拟iowait升高,但sys升高。stress -i参数表示通过系统调用sync来模拟IO问题,但sync是刷新内存缓冲区数据到磁盘中,以确保同步。如果内存缓冲区内没多少数据,读写到磁盘中的数据也就不多,没法产生IO压力。使用SSD磁盘的环境中尤为明显,iowait一直为0,但因为大量系统调用,导致系统CPU使用率sys升高。

stress --io 2 --hdd 2 --timeout 60s

开启2个IO进程,2个磁盘IO进程

4、Memory测试

stress --vm 2 --vm-bytes 1G --vm-hang 100 --timeout 100s

开启2个进程分配内存,每次分配1GB内存,保持100秒后释放,100秒后退出。

5、磁盘IO测试

stress --hdd 2 --hdd-bytes 10G --backoff 2000000

开启2个磁盘IO进程,每次写10GB数据到磁盘

三、stress测试场景

1、CPU密集型进程

stress --cpu 2 --timeout 600

模拟启动2个CPU密集型进程

uptime

查看系统平均负载,如下:

mpstat -P ALL 5 1

查看CPU使用情况,如下:

pidstat -u 5

查看进程负载情况,如下:

(1)通过uptime可以观察系统平均负载较高。

(2)通过mpstat观察到CPU0和CPU2的用户态CPU使用率很高,而iowait为0,说明进程是CPU密集型。进程使用CPU密集导致系统平均负载变高、CPU使用率变高。

(3)可以通过pidstat查看是stress进程导致CPU使用率较高。

2、IO密集型进程

stress -i 1 --hdd 1 --timeout 600

模拟1个worker调用sync刷新内存缓冲区write到磁盘。

uptime

查看系统平均负载,如下:

mpstat -P ALL 5

查看CPU使用情况,如下:

(1)可以通过uptime观察到,系统平均负载很高。

(2)通过mpstat观察到内核态CPU使用率很低,但iowait很高,一直在等待IO处理,说明进程是IO密集型。进程频繁进行IO操作,导致系统平均负载很高而CPU使用率不高。

3、等待CPU进程

本机4个逻辑CPU,模拟8个进程。

stress -c 8 --timeout 600

模拟8个CPU密集型进程

uptime

查看系统平均负载,如下:

mpstat -P ALL 5

查看CPU使用率情况,如下:

pidstat -u 5

查看进程的CPU使用情况,如下:

(1)通过uptime观察到系统平均负载很高

(2)通过mpstat观察到用户态CPU使用率很高,iowait为0,说明进程是CPU密集型或者进程间存在CPU争用。

(3)通过pidstat观察到wait指标很高,说明进程间存在CPU争用,系统中存在大量进程在等待使用CPU。

四、stress-ng简介

1、stress-ng简介

stress-ng完全兼容stress, 并且在stress基础上增加数百个选项参数,支持产生各种复杂的压力。

2、stress-ng安装

stress-ng源码下载:

https://kernel.ubuntu.com/~cking/tarballs/stress-ng/

编译:

make

安装:

sudo make install

3、stress-ng命令

  1. stress-ng [OPTION [ARG]]
  2. stress-ng --cpu 2 --cpu-method pi

产生2个worker做圆周率算法压力

stress-ng --cpu 2 --cpu-method all

产生2个worker迭代使用30多种不同的压力算法,包括pi, crc16, fft等

stress-ng --sock 2

产生2个worker调用socket相关函数产生压力

stress-ng --tsc 2

产生2个worker读取tsc产生压力

stress-ng --sock 4 --taskset 0-1,3

strss-ng将压力指定到指定CPU上

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux30020 人正在系统学习中
量化IT技术交流群
QQ群名片

与【转帖】Linux性能优化(一)——stress压力测试工具相似的内容:

【转帖】Linux性能优化(一)——stress压力测试工具

https://blog.csdn.net/a642960662/category_11641226.html 一、stress简介 1、stress简介 stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试。 2、stress安装 安装: sudo yum

[转帖]《Linux性能优化实战》笔记(一)—— 平均负载

最近在看极客时间的《Linux性能优化实战》课程,记录下学习内容。 一、 平均负载(Load Average) 1. 概念 我们都知道uptime命令的最后三列分别是过去 1 分钟、5 分钟、15 分钟系统的平均负载,到底平均负载是什么? 简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中

[转帖]《Linux性能优化实战》笔记(七)—— CPU瓶颈快速分析及性能优化思路

相当于是前面篇章的小结 一、 CPU 性能指标 常见指标包括: 平均负载CPU 使用率(user、iowait、system、软硬中断等)进程上下文切换(自愿、非自愿)CPU 缓存的命中率 CPU 的处理速度就比内存的访问速度快得多。这样,CPU 在访问内存的时候,免不了要等待内存的响应。为了协调这

[转帖]Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]Linux性能优化和内核观测 - 内存篇(一)

内存虚拟内存Linux 采用的是​​虚拟内存​​机制,每个进程都有自己的虚拟内存地址空间,仅当实际使用内存的时候才会映射到物理内存地址之上。这种设计提供了物理内存的超额分配,Linux 中的内存管理机制包括页换出守护进程(page out daemon)、物理换页设备(swap device),以及

[转帖]Linux 性能优化和内核观测 - CPU 篇(一)

https://blog.51cto.com/hongchen99/5840053 简介 中央处理器(central processing unit,简称 CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。所有的计算机程序都运行在CPU之上,在大多数情况下CPU都是性能分析

【转帖】Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]Linux性能优化(十五)——CPU绑定

一、孤立CPU 1、孤立CPU简介 针对CPU密集型的任务,CPU负载较高,推荐设置CPU Affinity,以提高任务执行效率,避免CPU进行上下文切换,提高CPU Cache命中率。 默认情况下,Linux内核调度器可以使用任意CPU核心,如果特定任务(进程/线程)需要独占一个CPU核心并且不想

【转帖】Linux性能优化(十六)——中断绑定

一、中断绑定简介 1、中断简介 计算机中,中断是一种电信号,由硬件产生并直接送到中断控制器上,再由中断控制器向CPU发送中断信号,CPU检测到信号后,中断当前工作转而处理中断信号。CPU会通知操作系统已经产生中断,操作系统就会对中断进行处理。常见的中断控制器有两种:可编程中断控制器8259A和高级可

【转帖】Linux性能优化(十四)——CPU Cache

一、CPU Cache 1、CPU Cache简介 CPU Cache是位于CPU与内存之间的临时存储器,容量比内存小但交换速度却比内存要快得多。Cache的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,会使CPU花费很长时间等待数据到来或把数