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

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景

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

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

 

stress 介绍


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

 

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

image.png


字段 含义
-?、--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.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

image.png

第二个终端

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

watch -d uptime

image.png

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

 

第三个终端

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

mpstat -P ALL 5

image.png

可以看出

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

 

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

 

使用 pidstat 命令

间隔 5 秒后输出一组数据

pidstat -u 5 1

image.png

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

 

I/O 密集型进程


第一个终端

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

image.png

第二个终端

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

watch -d uptime

image.png

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

 

第三个终端

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

mpstat -P ALL 5 1

image.png

灵魂拷问

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

 

回答

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

 

解决办法

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

stress --hdd 1 -t 600 --hdd-bytes 4G

 

再通过 mpstat 看看指标

mpstat -P ALL 5

image.png

可以看到

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

 

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

 

使用 pidstat 命令

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

pidstat -u 5 10

image.png

可以看到

kworker 内核进程 和 stress 进程的 CPU 使用率都是偏高的

 

大量进程的场景


目的

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

 

第一个终端

这次模拟 8 个进程

stress -c 8 -t 600

image.png

第二个终端

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

watch -d uptime

image.png

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

 

第三个终端

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

pidstat -u 5 5

image.png

可以看到

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

 

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


  • 平均负载提供了一个快速查看系统整体性能的手段,反映了整的负载情况
  • 但只看平均负载本身,我们并不能直接发现到底是哪里出现了瓶颈

 

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

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

 

通俗总结

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

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
1月前
|
缓存 监控 算法
软件测试中的性能瓶颈分析与优化策略
【10月更文挑战第6天】 性能测试是确保软件系统在高负载条件下稳定运行的重要手段。本文将深入探讨性能测试的常见瓶颈,包括硬件资源、网络延迟和代码效率等问题。通过具体案例分析,我们将展示如何识别并解决这些问题,从而提升软件的整体性能。最后,文章还将分享一些实用的性能优化技巧,帮助读者在日常开发和测试中更好地应对性能挑战。
86 3
|
2月前
|
监控 测试技术 持续交付
软件测试中的性能瓶颈分析与优化策略
性能瓶颈,如同潜伏于软件深处的隐形障碍,悄然阻碍着系统的流畅运行。本文旨在揭示这些瓶颈的形成机理,剖析其背后的复杂成因,并汇聚一系列针对性的优化策略,为软件开发者提供一套系统性的解决方案。
50 5
|
14天前
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
|
1月前
|
缓存 监控 测试技术
软件测试中的性能瓶颈分析与优化策略
本文深入探讨了在软件测试过程中,如何有效地识别和解决性能瓶颈问题。通过对性能瓶颈的定义、分类以及常见原因的分析,结合实际案例,提出了一系列针对性的优化策略和方法。这些策略旨在帮助测试人员和开发人员提高软件的性能表现,确保软件在高负载条件下依然能够稳定运行。
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
46 2
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
73 1
|
2月前
|
监控 算法 测试技术
软件测试中的性能瓶颈分析与优化策略
本文旨在深入探讨软件测试过程中性能瓶颈的识别与优化方法。通过对性能瓶颈的概念、分类及其成因进行分析,结合实际案例,提出一套系统的性能瓶颈诊断流程和针对性的优化策略。文章首先概述了性能瓶颈的基本特征,随后详细介绍了内存泄漏、资源竞争、算法效率低下等常见瓶颈类型,并阐述了如何通过代码审查、性能监测工具以及负载测试等手段有效定位问题。最后,结合最佳实践,讨论了代码级优化、系统配置调整、架构改进等多方面的解决措施,旨在为软件开发和测试人员提供实用的性能优化指导。
74 4
|
2月前
|
JavaScript 前端开发 数据库
数据库测试场景实践总结
本文介绍了数据库超时和应用锁表SSDB测试场景的验证方法,通过锁定数据表模拟写入失败情况,并利用SSDB进行重试。测试需开发人员配合验证功能。同时,提供了SSDB服务器登录、查询队列数量及重启服务等常用命令。适用于验证和解决数据库写入问题。
35 7
|
3月前
|
前端开发 测试技术 UED
【测试效率对比】深入分析:为何UI自动化测试的投资回报率通常低于接口自动化测试?
这篇文章深入分析了UI自动化测试与接口自动化测试的投资回报率(ROI)问题,指出UI自动化测试在某些情况下的ROI并不低,反驳了没有实施过UI自动化就轻易下结论的观点,并强调了实践的重要性和自动化测试在项目迭代中的作用。
82 1
|
2月前
|
SQL 搜索推荐 测试技术
ChatGPT与测试分析
本产品需求文档(PRD)针对论坛网站的搜索功能优化,旨在提升搜索结果的准确性和速度,增强用户体验。文档涵盖项目背景、目标、功能需求(如搜索结果准确性、搜索速度优化、过滤和排序等)、非功能需求(如兼容性、性能、安全性等)、用户界面设计和技术架构等内容,并制定了详细的测试和上线计划,确保项目顺利实施。
30 0
下一篇
无影云桌面