首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景

性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景

作者头像
小菠萝测试笔记
发布2020-07-21 09:44:52
1.7K0
发布2020-07-21 09:44:52
举报

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)

  • 产生 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.5.tar.gz

tar -zxvf stress-1.0.4.tar.gz
分别进入解压后的两个文件夹执行以下命令
./configure

make&&make install

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

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

CPU 密集型进程

第一个终端

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

stress -c 1 -t 600
第二个终端

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

watch -d uptime

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

第三个终端

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

mpstat -P ALL 5

可以看出

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

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

使用 pidstat 命令

间隔 5 秒后输出一组数据

pidstat -u 5 1

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

I/O 密集型进程

第一个终端

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

第二个终端

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

watch -d uptime

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

第三个终端

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

mpstat -P ALL 5 1
灵魂拷问

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

回答
  • iowait 无法升高是因为案例中 使用的是 sync() 系统调用,它的作用是刷新缓冲区内存到磁盘中

stress -i

  • 对于新安装的虚拟机,缓冲区可能比较小,无法产生大的io压力
  • 这样大部分都是系统调用的消耗
  • 所以,只看到系统 CPU 使用率升高
解决办法

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

stress --hdd 1 -t 600 --hdd-bytes 4G
再通过 mpstat 看看指标
mpstat -P ALL 5

可以看到

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

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

使用 pidstat 命令

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

pidstat -u 5 10

可以看到

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

大量进程的场景

目的

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

第一个终端

这次模拟 8 个进程

stress -c 8 -t 600
第二个终端

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

watch -d uptime

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

第三个终端

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

pidstat -u 5 5

可以看到

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

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

  • 平均负载提供了一个快速查看系统整体性能的手段,反映了整的负载情况
  • 但只看平均负载本身,我们并不能直接发现到底是哪里出现了瓶颈
平均负载过高的分析排查思路
  • 有可能是 CPU 即密集型进程导致的
  • 平均负载过高不代表 CPU 使用率高,也有可能是 I/O 更密集了
  • 当发现平均负载过高时,可以通过 mpstat、pidstat 等工具,辅助分析负载的来源
通俗总结

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • stress 介绍
    • 来看看 stress 命令行参数的讲解
      • Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size)
      • sysstat 介绍
        • mpstat
          • pidstat
          • 安装两个工具
            • 提供百度云盘链接
              • 解压
                • 分别进入解压后的两个文件夹执行以下命令
                • 平均负载和 CPU 使用率的实际栗子
                  • 前言
                    • CPU 密集型进程
                      • 第一个终端
                      • 第二个终端
                      • 第三个终端
                      • 使用 pidstat 命令
                    • I/O 密集型进程
                      • 第一个终端
                      • 第二个终端
                      • 第三个终端
                      • 灵魂拷问
                      • 回答
                      • 解决办法
                      • 再通过 mpstat 看看指标
                      • 使用 pidstat 命令
                    • 大量进程的场景
                      • 目的
                      • 第一个终端
                      • 第二个终端
                      • 第三个终端
                      • 平均负载过高的分析排查思路
                      • 通俗总结
                  • 对于平均负载的一个理解和总结
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档