做性能测试的必备知识系列,可以看下面链接的文章哦

https://www.cnblogs.com/poloyy/category/1806772.html

stress 介绍

Linux 系统压力测试工具,这里通过异常进程模拟平均负载升高的场景

来看看 stress 命令行参数的讲解

参数 含义
-?、--help 帮助文档
--version、-v 版本号
-q 退出
-n 显示已完成指令的情况
-t N、--timeout N 运行 N 秒后停止
--backoff N 等待 N 微秒后开始运行
-c N、--cpu N
  • 产生 N 个进程
  • 每个进程反复的计算随机数的平方根
  • 模拟 CPU 计算密集型场景
-i N、--io N
  • 产生 N 个进程
  • 每个进程反复调用 sync()
  • 模拟 I/O 密集型场景
-m N、--vm N
  • 产生 N 个进程
  • 每个进程不断调用内存分配 malloc() 和内存释放 free() 函数

--vm-bytes B

指定 malloc() 时内存的字节数,默认256MB
--vm-hang N 指定执行 free() 前等待的秒数
-d N、 --hdd N
  • 产生 N 个进程
  • 每个进程执行 write() 和 unlink() 的进程
--hdd-bytes B 

每个hdd worker写入B字节(默认为1GB)

Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size)

时间单位可以为秒 s,分m,小时h,天d,年y,文件大小单位可以为 K,M,G

sysstat 介绍

  • 包含了常用的 Linux 性能工具,用来监控和分析系统的性能
  • 接下来会用到 mpstat 和 pidstat 两个命令
  • 后面用单独一篇详细讲解里面包含的所有命令

mpstat

  • 常用的多核 CPU 性能分析工具
  • 实时查看每个 CPU 的性能指标以及所有 CPU 的平均指标

pidstat

  • 常用的进程性能分析工具
  • 实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标

安装两个工具

提供百度云盘链接

链接:https://pan.baidu.com/s/1YENSYaGw7Ar1Z8hf8CXGqA

提取码:2tpc

放到 Linux 下的某个目录

解压

tar -zxvf sysstat-12.1..tar.gz

tar -zxvf stress-1.0..tar.gz

分别进入解压后的两个文件夹执行以下命令

./configure

make&&make install

平均负载和 CPU 使用率的实际栗子

前言

  • 前面一篇文章也讲到了平均负载和 CPU 使用率的三个场景,接下来我们分别对这三个场景举例子
  • 需要打开三个终端访问同一个 Linux 机器哦
  • 我的 Linux 是虚拟机,2个cpu,2核

CPU 密集型进程

第一个终端

在第一个终端运行 stress 命令,模拟一个 CPU 使用率 100% 的场景

stress -c  -t 

第二个终端

运行 uptime 查看系统平均负载情况,-d 参数表示高亮显示变化的区域

watch -d uptime

可以看到,1 分钟的平均负载会慢慢增加到 1.00

第三个终端

运行 mpstat 查看 CPU 使用率的变化情况

mpstat -P ALL 

可以看出

  • 仅有一个 CPU 的使用率接近 100%,但它的 iowait 只有 0
  • 这说明,平均负载的升高正是由于 CPU 使用率为 100%

接下来,就要排查是哪个进程导致 CPU 的使用率这么高的

使用 pidstat 命令

间隔 5 秒后输出一组数据

pidstat -u  

从这里可以明显看到,stress 进程的 CPU 使用接近 100%

I/O 密集型进程

第一个终端

运行 stress 命令,但这次模拟 I/O 压力,即不停地执行 sync()

第二个终端

运行 uptime 查看系统平均负载情况,-d 参数表示高亮显示变化的区域

watch -d uptime

可以看到,1 分钟的平均负载也会慢慢增加到 1.00

第三个终端

运行 mpstat 查看 CPU 使用率的变化情况

mpstat -P ALL  1

灵魂拷问

其实 iowait 并没有上去,反而还是系统态(%sys)升高了,这是怎么回事?难道是工具的问题?

回答

  • iowait 无法升高是因为案例中 stress -i 使用的是 sync() 系统调用,它的作用是刷新缓冲区内存到磁盘中
  • 对于新安装的虚拟机,缓冲区可能比较小,无法产生大的io压力
  • 这样大部分都是系统调用的消耗
  • 所以,只看到系统 CPU 使用率升高

解决办法使用 stress 的另一个参数 -d ,含义上面已经说了哦

stress --hdd  -t  --hdd-bytes 4G

再通过 mpstat 看看指标

mpstat -P ALL 

可以看到

  • iowait 是明显升高了,虽然我们的 CPU 使用率也较高
  • 当做了几次尝试之后,包括启动了 2个、4个进程,发现 CPU 使用率仍然保持在 30%+,而 iowait 则不断升高,最高可达到40%+,而且平均负载也在不断升高
  • 所以可以看出平均负载的升高,很大原因是因为 iowait 的不断升高

接下来,就要排查是哪个进程导致 iowait 这么高了

使用 pidstat 命令

间隔 5 秒后输出一组数据,收集 10 次,查看最后的平均值

pidstat -u  

可以看到

kworker 写入字节的进程 和 stress 进程的 CPU 使用率都是偏高的

大量进程的场景

目的

当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程

第一个终端

这次模拟 8 个进程

stress -c  -t 

第二个终端

运行 uptime 查看系统平均负载情况,-d 参数表示高亮显示变化的区域

watch -d uptime

我的系统只有 4 个 CPU,比 8 个进程少得多,CPU 处于严重的过载状态,平均负载已经超过 8 了

第三个终端

可以直接通过 pidstat 来查看进程的情况了,每隔 5s 收集一次,收集 5 次,看平均值
pidstat -u  

可以看到

  • 8 个进程在竞争 4 个 CPU
  • 每隔进程等待 CPU 的时间(%wait)高达 50%
  • 这些超出 CPU 计算能力的进程,导致 CPU 过载

对于平均负载的一个理解和总结

平均负载提供了一个快速查看系统整体性能的手段,反映了整的负载情况

但只看平均负载本身,我们并不能直接发现到底是哪里出现了瓶颈

平均负载过高的分析排查思路

  • 有可能是 CPU 即密集型进程导致的
  • 平均负载过高不代表 CPU 使用率高,也有可能是 I/O 更密集了
  • 当发现平均负载过高时,可以通过 mpstat、pidstat 等工具,辅助分析负载的来源

通俗总结

平均负载过高是出现性能瓶颈的表现,分析瓶颈产生的源头和原因,需要通过各类工具

性能测试必备知识(4)- 使用 stress 和 sysstat的更多相关文章

  1. 性能测试必备知识(6)- 如何查看“CPU 上下文切换”

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 课前准备,安装 sysbench 下载 sy ...

  2. 性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 缓存 从 free 命令可以看到,缓存其实就 ...

  3. 性能测试必备知识(2)- 查看 Linux 的 CPU 相关信息

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 查看系统 CPU 信息 cat /proc/ ...

  4. 性能测试必备知识(5)- 深入理解“CPU 上下文切换”

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 前言 上一篇文章中,举例了大量进程等待 CP ...

  5. 性能测试必备知识(7)- 深入理解“CPU 使用率”

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 回顾 CPU 使用率是单位时间内 CPU 使 ...

  6. 性能测试必备知识(10)- Linux 是怎么管理内存的?

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 内存映射 日常生活常说的内存是什么 比方说, ...

  7. 性能测试必备命令(2)- uptime

    性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 系统启动up了(运行了)多 ...

  8. Java面试必备知识

    JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...

  9. Apache Tomcat8必备知识

    Apache Tomcat8必备知识 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 一.Apache Tomcat 8介绍 Apache Tomcat ...

随机推荐

  1. Web前端 -- Webpack

    一.Webpack Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 二.Webpack安装 1.全局安装 npm i ...

  2. Linux性能优化思路

    性能测试的核心,就是找出性能瓶颈并进行性能优化,解决"慢"的问题,最终满足客户业务需求. [性能需求来源及性能问题现象] 性能需求的来源,主要分为以下几类: 项目组提出性能需求: ...

  3. linux环境下安装git(采用github下载git源码编译)

    [目的]:linux环境下 安装配置git成功 [准备条件]linux系统,git包 1.先行下载git包 -- 从github上https://github.com/git/git/releases ...

  4. Python三大器之装饰器

    Python三大器之装饰器 开放封闭原则 一个良好的项目必定是遵守了开放封闭原则的,就比如一段好的Python代码必定是遵循PEP8规范一样.那么什么是开放封闭原则?具体表现在那些点? 开放封闭原则的 ...

  5. eclipse使用git提交代码

    准备工作: 目的:eclipse使用git提交本地项目,提交至远程github上 eclipse版本:eclipse4.5  64位 jdk版本:jdk-1.7 64位 项目类型:maven web项 ...

  6. vs2010调试运行时弹出对话框:系统找不到指定文件

    很多时候,我们会将一些低版本IDE编译过的项目,搬迁到VS2010 ,那么会存在很多编译,调试问题.[1] 编译成功了.可是无法调试 . .       显示 无法启动程序“...........\t ...

  7. 洛谷 P6145 【[USACO20FEB]Timeline G】

    这道题难就难在建图吧,建图懂了之后,跑一遍最长路就好了(也就是关键路径,但是不会用拓补排序求qnq,wtcl). 怎么建图呢?先不管输入的S,看下面的输入,直接建有向边即可,权值为x.如果现在跑最长路 ...

  8. css3支持动画吗?css3可以用于网页动画的展现吗

    CSS3 主要可以分为几个模块:边框和背景,渐变,文字特效,字体,2D/3D转换,动画(过渡动画和动画),选择器,盒模型,多列布局,用户界面. css3动画有2类:一种是transition的,另一种 ...

  9. 查看windows操作系统的默认编码

    转自:https://blog.csdn.net/zp357252539/article/details/79084480/ 在Windows平台下,进入DOS窗口,输入:chcp 可以得到操作系统的 ...

  10. SpringBoot2.x入门:应用打包与启动

    前提 这篇文章是<SpringBoot2.x入门>专辑的第5篇文章,使用的SpringBoot版本为2.3.1.RELEASE,JDK版本为1.8. 这篇文章分析一个偏向于运维方面的内容: ...