怎么测试网络带宽_性能测试案例与经验分享

性能基准测试

性能基准测试,通常被称为 Performance Benchmark Test,是每次对外发布产品版本前必须要完成的测试类型。

性能基准测试,会基于固定的硬件环境和部署架构(比如专用的服务器、固定的专用网络环境、固定大小的集群规模、相同的系统配置、相同的数据库背景数据等),通过执行固定的性能测试场景得到系统的性能测试报告,然后与上一版本发布时的指标进行对比,如果发现指标有“恶化”的趋势,就需要进一步排查。

典型的“恶化”趋势,主要表现在以下几个方面:

  • 同一事务的响应时间变慢了。比如,上一版本中,用户登录的响应时间是 2 s,但是在最新的被测版本中这个响应时间变成了 4 s;
  • 系统资源的占用率变高了。比如,上一版本中,平均 CPU 占用率是 15%,但是在最新的被测版本中平均 CPU 占用率变成了 30%;
  • 网络带宽的使用量变高了。比如,上一版本中,发送总字节数是 20 MB,接收总字节数是 200 MB,但是在最新的被测版本中发送总字节数变成了 25 MB,接收总字节数变成了 250 MB。

这里需要注意的是,这些“恶化”趋势的前提是:完全相同的环境以及测试负载。不同“恶化”指标的排查,有不同的方法。我以最常见的事务响应时间变慢为例,和你说明一下排查方法。

假设,通过性能基准测试的比较结果得知,用户登录的响应时间从 2 s 变成了 4 s。

那么,我们首先要做的是验证在单用户的情况下,是否会出现响应时间变长的问题。具体做法是,将用户登录的虚拟用户脚本单独拿出来,建立一个单用户运行的性能测试场景并执行,观察用户登录的响应时间是否变慢。

如果变慢了,就说明这是单用户登录场景就可重现的性能问题,后续的处理也相对简单了。解决方法是:分析单用户登录的后端日志文件,看看完成登录操作的时间具体都花在了哪些步骤上,相比之前哪些步骤花费的时间变长了,或者是多出了哪些额外的步骤。

如果没有变慢,则说明我们必须尝试在有压力的情况下重现这个性能问题。为此,我们要基于用户登录的虚拟用户脚本构建并发测试的场景,但是我们并不清楚在这个场景设计中到底应该采用多少并发用户、加入多长的思考时间。这时,通常的做法是,直接采用性能基准测试中的并发用户数和思考时间,去尝试重现问题。如果无法重现,我们可以适当地逐步加大测试负载,并观察响应时间的变化趋势。

这里需要注意的是,千万不要使用过大的测试负载。因为测试负载过大的话,系统资源也会成为性能瓶颈,一定会使响应时间变长。但这时,响应时间变长主要是由资源瓶颈造成的,而不是你开始要找的那个原因。

如果此时可以重现问题,那就可以进一步去分析并发场景下,用户登录操作的时间切片,找到具体的原因。如果此时还是不能重现问题的话,情况就比较复杂了,也就是登录操作的性能可能和其他的业务操作存在依赖,或者某种资源竞争关系,这就要具体问题具体分析了。

一般来说,当定位到性能“恶化”的原因并修复后,我们还会再执行一轮性能基准测试,以确保系统对外发布前的性能基准测试指标没有“变坏”。可以说,通过对每个预发布版本的性能基准测试,我们可以保证新发布系统的整体性能不会下降,这也就是性能基准测试最终要达到的目的。

很多大型的传统软件公司都有专门的性能测试团队,这个团队会建立标准的性能基准测试场景,并把性能基准测试的结果作为产品是否可以发布的依据之一。比如,我曾工作过的 HP 软件,就由性能测试卓越中心负责维护、执行性能基准测试,并分析测试结果。

从性能基准测试的设计角度来看,你需要特别注意以下三点:

  1. 性能基准测试中虚拟用户脚本的选择以及配比,需要尽可能地匹配实际的负载情况;
  2. 总体的负载设计不宜过高,通常被测系统的各类占用率指标需要控制在 30% 以内,尽量避免由于资源瓶颈引入的操作延时;
  3. 每次性能基准测试前,一般需要对系统资源以及网络资源做一轮快速的基准测试,以保证每次被测环境的一致性,同时也要保证数据库的数据量在同一个级别上。总之,你需要采用一切可能的手段,来确保多次性能基准测试之间的环境一致性。

9f302d648beee999a0adbbbf6927f110.png

稳定性测试

稳定性测试,又称可靠性测试,主要是通过长时间(7*24 小时)模拟被测系统的测试负载,来观察系统在长期运行过程中是否有潜在的问题。通过对系统指标的监控,稳定性测试可以发现诸如内存泄漏、资源非法占用等问题。

很多企业级的服务器端产品,在发布前往往都要进行稳定性测试。稳定性测试,通常直接采用性能基准测试中的虚拟用户脚本,但是性能测试场景的设计和性能基准测试场景会有很大不同:

一般是采用“波浪式”的测试负载,比如先逐渐加大测试负载,在高负载情况下持续 10 多个小时,然后再逐渐降低负载,这样就构成了一个“波浪”,整个稳定性测试将由很多个这样的波浪连续组成。

稳定性测试成功完成的标志,主要有以下三项:

  • 系统资源的所有监控指标不存在“不可逆转”的上升趋势;
  • 事务的响应时间不存在逐渐变慢的趋势;
  • 事务的错误率不超过 1%。

实际工程项目中,由于稳定性测试执行的时间成本很高,往往需要花费 3~7 天的时间,所以我们一般是在其他所有测试都已经完成,并且所有问题都已经修复之后才开始稳定性测试。

另外,有些企业为了缩短稳定性测试的执行时间,往往还会采用“时间轴压缩”的方法,具体的做法就是:在加大测试负载的前提下,适当缩短每个“波浪”的时间,从而减少整体的测试执行时间。

最后,需要强调的一点是,虽然很多时候,尤其是产品版本已经逐渐走向成熟期时,稳定性测试并不会发现问题,但是千万不要小看稳定性测试带来的价值。因为稳定性测试一旦发现问题,那么这些问题都是很严重而且非常隐蔽的大问题。

所以,很多大型的企业级软件企业都会执行严格的稳定性测试,并把稳定性测试的结果作为产品是否可以发布的硬性要求。比如,我曾经工作过的 HP 软件研发中心,它每次产品发布前都会由专门的性能测试团队完成严格的稳定性测试,并以此来决定是否要发布这个产品。

19b09b5ea57c20cf77ba5a1b4a50fded.gif

并发测试

并发测试,是在高并发情况下验证单一业务功能的正确性以及性能的测试手段。高并发测试一般使用思考时间为零的虚拟用户脚本来发起具有“集合点”的测试。

“集合点”的概念,我已经在《聊聊性能测试的基本方法与应用领域》中解释过了。如果你不清楚的话,可以再回顾一下这篇文章。如果你还有不理解的地方,也欢迎和我留言讨论。

并发测试,往往被当作功能测试的补充,主要用于发现诸如多线程、资源竞争、资源死锁之类的错误。要执行并发测试,就需要加入“集合点”,所以往往需要修改虚拟用户脚本。

加入“集合点”一般有两种做法:

  1. 在虚拟用户脚本的录制过程中直接添加;
  2. 在虚拟用户脚本中,通过加入 lr_rendezvous() 函数添加。

cac6fc69f5b43c0e72c57494e54bf75b.png

容量规划测试

容量规划测试,是为了完成容量规划而设计执行的测试。

那什么是容量规划呢?所谓容量规划,是软件产品为满足用户目标负载而调整自身生产能力的过程。

所以,容量规划的主要目的是,解决当系统负载将要达到极限处理能力时,我们应该如何通过垂直扩展(增加单机的硬件资源)和水平扩展(增加集群中的机器数量)增加系统整体的负载处理能力的问题。

目前来讲,容量规划的主要方法是基于水平扩展。但是,具体应该增加多少机器,以及增加后系统的负载处理能力是否会线性增长,这些问题都需要通过容量规划测试进行验证。

那么,容量规划测试具体要怎么做呢?

我们可以使用性能基准测试中的虚拟用户脚本,以及各个业务操作脚本的百分比,压测单机部署的被测系统。我们会采用人工的方式不断增加测试负载直到单机系统的吞吐量指标到达临界值,由此就可以知道单台机器的处理能力。

理论上讲,整个集群的处理能力将等于单台机器的处理能力乘以集群的机器数,但是实际情况并不是这样。实际的集群整体处理能力一定小于这个值,但具体小多少就是要靠实际的测试验证了。

理想的状态是,集群整体的处理能力能够随着集群机器数量的增长呈线性增长。但是,随着机器数量的不断增长,总会在达到某个临界值之后,集群的整体处理能力不再继续呈线性增长。这个临界值是多少,我们也需要通过容量规划测试找出来了。

另外,容量规划测试的测试结果还可以被用作系统容量设计的依据。比如,企业级软件产品的目标用户规模通常是可以预估的,那么我们就可以通过这些预估的系统负载计算出软件部署的集群规模,并且可以在具体实施后通过容量测试的方式进行验证。

来源:图文来自网络

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务跨数据库联合查询_MySQL数据库联合查询

大家好,我是anyux。数据库联表查询很重要,内联查询更是尤为重要。需要将school.sql文件导入到数据库中数据库多表联合查询,school库下表的逻辑结构关系都在下图中。可以通过驱动表加子表配合实现所有查询要求。统计zhang3,学习了几门课select…

mos 控制交流_电机控制器母线电容的设计选型

母线电容的定义在电机控制器中,电池包的直流电作为输入电源,需要通过直流母线与电机控制器连接,该方式叫DC-LINK或者直流支撑,其中的电容我们称之为母线电容或者支撑电容或者DC-Link电容。由于电机控制器从电池包得到有效值或者峰…

方法的返回值类型是object_JavaScript中如何判断类型

1. typeoftypeof (整数/小数/自然对数Math.LN2/正无穷大数Infinity) > numbertypeof NaN > numbertypeof (function(){}) > functiontypeof Math.sin > functiontypeof undefined > undefinedtypeof xxxx > stringtypeof > stringtypeof true/false >…

c++代码整洁之道pdf_别再问如何用Python提取PDF内容了!

公众号后台回复“图书“,了解更多号主新书内容作者:陈熹来源:早起Python导读大家好,在之前的办公自动化系列文章中我们已经详细介绍了👉如何使用Python批量处理PDF文件,包括合并、拆分、水印、加密等操作。…

vim编辑模式_sublime vim模式和快捷键

vim的四种模式及模式切换vim一共有4个模式&#xff1a;正常模式 (Normal-mode) 插入模式 (Insert-mode)命令模式 (Command-mode)可视模式 (Visual-mode)正常模式启动vim后默认处于正常模式。不论位于什么模式&#xff0c;按下<Esc>键(有时需要按两下&#xff09;都会进入…

python读取txt文件_python实现读写txt文件的几种方法

一、读写模式&#xff1a;w&#xff1a;向文件中写入内容&#xff0c;w会清空原来文本内容a&#xff1a;向文件中追加内容r&#xff1a;从文件中读取内容wb&#xff1a;以二进制形式写入内容。rb&#xff1a;以二进制形式读文件内容ab&#xff1a;以二进制形式追加内容a、r、w&…

centos7升级openssh

注意&#xff1a; openssl版本(openssl版本要大于1.0.1&#xff0c;zlib版本要大于1.1.4) 一、安装依赖包 yum -y install gcc make perl # zlib zlib-devel yum install -y gcc openssl-devel pam-devel rpm-buildyum install telnet-ser…

java 复制对象_Java程序员必备:序列化全方位解析

前言 相信大家日常开发中&#xff0c;经常看到Java对象“implements Serializable”。那么&#xff0c;它到底有什么用呢&#xff1f;本文从以下几个角度来解析序列这一块知识点~什么是Java序列化&#xff1f;为什么需要序列化&#xff1f;序列化用途Java序列化常用API序列化的…

decimal类型对象里面定义什么类型_奥斯塔罗 单身开启桃花雷达 现阶段的我适合什么类型的对象?...

相信单身朋友总好奇下一位对象是否出现了&#xff1f;或是这么多人我该如何察觉下一位对象呢&#xff1f;如果单身的你正寻找对象中那就跟奥斯老师一起来看看下一位对象的个性与特征吧&#xff01;&#xff1c;&#xff1c;直觉选一张牌&#xff1e;>牌l选择到这组牌的朋友&…

win7系统怎么拷贝到u盘_Win7系统电脑无法识别U盘启动盘怎么办?

U盘想必大家不会陌生&#xff0c;通常会用来存储一些资料便于移动办公&#xff0c;有些小伙伴也会将其变更成U盘启动盘&#xff0c;帮助电脑重装系统。但是有用户反馈U盘插入电脑后无法识别启动&#xff0c;这要怎么办呢&#xff1f;其实很简单&#xff0c;下面小编就给大家带来…

数据库日志

很多时候需要追踪记录的变更情况&#xff0c;AX里有数据库日志来完成这件事情&#xff0c;操作路径为:系统管理->设置->数据库日志.如果按照向导添加后没看到相应的记录&#xff0c;可以尝试如下方法&#xff0c;选中生命科学电子签名。系统管理->设置->系统->配…

Nginx的应用之安装配置

一、Nginx简述 Nginx是一个开源且高性能、可靠的Http Web服务、代理服务。 开源: 直接获取源代码 高性能: 支持海量并发 可靠: 服务稳定 我们为什么选择 Nginx服务 Nginx非常轻量 功能模块少 (源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装) 代码模块化 (易…

包含以下字段的 struct 怎么解决_S7-300/400进阶笔记4-2:STEP7的“结构”STRUCT数据类型的用法...

复杂数据类型是由基本数据类型通过一定的规则&#xff0c;有机结合在一起&#xff0c;形成的新的、复杂数据类型&#xff0c;STEP7中定义了以下几种复合数据类型&#xff1a;本文&#xff0c;我们介绍一下结构——STRUCT。STRUCT表示由一个不同数据类型的数据组合在一起&#x…

springboot a service调用b service_CaaS: 内容是新的基础设施 Content-as-a-Service

内容是每家企业的必争之地&#xff0c;根据 CMI 的数据报告&#xff0c;88% 的 B2B 企业每天至少产生一篇内容。内容正在成为新的基础设施&#xff0c;Content as a Service 可以被简单理解为一种 CMS&#xff08;Content Management Systen&#xff0c;内容管理系统&#xff0…

javascript网页特效_南通建网站哪些,网页设计维护

无锡邦程信息科技有限公司为您详细解读rKXvd南通建网站哪些的相关知识与详情&#xff0c;#末网页设想师根据差别站点的内容微风格&#xff0c;设想出完美的网页效果图。内容填充&#xff1a;不论是个人网站还是企业网站&#xff0c;都必需从内容那个动身点考虑&#xff0c;一个…

request用法_虚拟语气用法总结

虚拟语气主要指的的是带有非真实条件状语从句的复合句&#xff0c;表达的是说话人的遗憾后悔的语气&#xff0c;愿望以及建议&#xff0c;命令&#xff0c;要求等等的情感&#xff0c;往往说的是与事实相反或者没办法实现改变的东西。虚拟语气主要表现为在对过去现在或者将来的…

成为高效程序员的几大搜索技巧

对于缺乏编程知识的人来说&#xff0c;完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话&#xff0c;可以搜到现成的代码。即使是经验丰富的程序员&#xff0c;通常也会为了节省时间和精力而在网上搜索解决方案。 如果不借助搜索技术、网络及集体智慧&am…

flink运行原理_Flink运行架构剖析

本文主要介绍 Flink Runtime 的作业执行的核心机制。首先介绍 Flink Runtime 的整体架构以及 Job 的基本执行流程&#xff0c;然后介绍Flink 的Standalone运行架构&#xff0c;最后对Flink on YARN的两种模式进行了详细剖析。Flink Runtime作业执行流程分析整体架构图Flink Run…

vb 获取系统声音的电平_质量好的背景音乐系统套装效果图

笔者是主张低阶设计的&#xff0c;但不一定是越低阶越好&#xff0c;前面已经讲过是以分而治之的手段&#xff0c;达致阴阳融合之目的。分而治之就是把高低音单元的互相不协调的部分和缺点去掉&#xff0c;保留各自的优点&#xff0c;以达到互补融合之目的。有扩声系统中才存在…

vue初级尝试

为了跟上前端后台化的潮流&#xff0c;本少不得不开始关注vue&#xff0c;下列上机代码是针对App.vue进行的更改 数据渲染----一般键值对&#xff0c;数组&#xff0c;对象和对象数组<template><div id"app"><img><h1>{{msg}}</h1><…