【性能测试】性能需求挖掘、性能方案制定及压测场景设计之疑惑与思考(一)

压力测试

模拟用户在同一时间对服务器发送大量请求,以此查看服务器性能指标,尤其关注大业务量情况下运行系统性能的变化(反应变慢、是否会内存泄漏导致系统逐渐崩溃、是否能恢复),测试系统的限制和故障恢复能力,找系统瓶颈

1、需加集合点,模拟用户瞬间并发,对服务器冲击力大

2、只执行一次,不需设置持续运行时间

3、每3秒进5个人,用户达到30 50 80集合后分别压测,然后利用二分法不断取中间值,找出最大吞吐量

尖峰测试(Spike testing)Ultimate Thread Group(终极线程组)

在性能测试中属于压力测试的一个子集。指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景。

场景1:

网站平稳运行时,突然有一波1000用户同时访问(第1浪潮),访问了30s之后,第一浪潮在15s内逐渐退出系统同时;

第二波2000用户在极短时间内又突然涌入网站(第2浪潮)。访问30s之后,第二浪潮在15s内也逐渐退出了系统。

并发用户数

实际就是在线用户数,相对并发用户数,在一个时间段内,与服务器进行了交互、对服务器产生了压力的用户的数量。这个时间段,可以是一天,也可以是一个小时

1、并发用户数标准不能以注册用户数为标准,应以在线用户数为标准或同时发请求用户更准,或注册用户数20%

2、并发用户数= 系统总用户数20%—30%

3、并发越大,响应时间越长,也跟吞吐量和服务器处理能力有关

4、每隔5分钟增加一定的并发数,直到达到瓶颈数,即线程数增加了以后tps处理量不在增加了,这个线程数可以算成合理的并发数。

负载测试

测试在一定负载情况下系统性能,逐步增加用户数量或用户请求来对系统进行加压,直到系统响应超时或关键资源耗尽,得到不同负载下系统性能指标,不关注稳定性。(关注最大安全临界负载量、吞吐量)

1、不加集合点,逐渐增加用户到系统瓶颈。对服务器冲击力小

2、需设置持续运行时间

3、逐渐增加用户,持续运行,直至达到系统瓶颈

稳定性测试

网站承受的最大负载值下,持续长时间运行,以此查看服务器的稳定性

1、不加集合点,逐渐增加用户到最大负载量(负载测试最大点)

2、达到最大负载需设置持续运行时间

3、逐渐增加用户到最大负载量,然后再持续运行一段时间(稳定性测试时长),然后逐渐退出

故障转移测试

恢复测试,是要把服务器压崩溃,测试另一台服务器是否可正常顶上

系统用户数(注册用户数)

在线用户数(相对并发用户数)

绝对并发用户

主要是针对某一个操作进行测试,即多个用户同一时刻发起相同请求,验证是否存在并发逻辑上的处理问题,如线程不安全、 死锁等问题;也可提供一些性能上的参考

日常压力(日常数据分析)

测试场景,就是要用500个用户在4小时内完成“每人发一个帖子、浏览十个帖子”的工作量。

高峰期压力(日常数据分析)

是指系统正常的、预期内压力的一个高峰

峰值压力,不在正常预期内的压力

 

性能指标:

1、吞吐量

服务端返给客户端的数据量,是指对网络单位时间内成功地传送数据的数量,是单位时间服务器处理事务的总数

Tps 是服务器每秒处理的事务字节数

随用户数逐渐增多,吞吐量应该是递增,如果吞吐量下降,服务器处理事务能力下降,响应时间变长,达到系统瓶颈

2、请求响应时间

从客户端发起的一个请求开始到客户端接收到服务器返回结束所耗费的时间=网络响应时间+应用层响应时间

3、事务响应时间

用户的一个操作的响应时间,是由一系列请求的响应时间组成

4、CPU

中心处理单元,由控制单元和运算单元组成,对数据进行处理,并发出控制命令,协调周边设备运行,对数据判断极逻辑处理,不能存储数据,从内存中读取数据进行逻辑计算,如果内存中没数据,才会从硬盘中读数据到内存,再进行逻辑计算,不能高于75%

5、错误率

6、内存

liunx内存工作原理,内存8g  优先分出7g  一部分分给应用,一部分分给缓存内存,放应用内存不足时,会把缓存内存优先分给应用

 

性能问题及其BUG

1、大数据量下,产生的性能问题

2、大访问用户量下,产生的性能问题

3、预估未来数据量,产生的性能问题

4、大结果集下,产生的性能问题

5、大复杂逻辑下,产生的性能问题

6、数据库产生的性能问题(未分库、未分表、未主从分离、数据库结构、SQL慢查询、实时查询、索引优化(建立主键或唯一索引、未使用联合索引)

7、性能缺陷:(并发错误、死锁、内存泄露)

8、cpu处于70%-100%之间波动

 

需求产生

分析用户是如何使用系统,用户对哪些业务性能比较敏感,系统的一些关键业务实现逻辑,从设计实现的角度来看哪些业务的性能可能存在隐患

通过友盟、阿里云、埋点、数据库、产品、运维等收集信息,分析系统、分析业务、分析用户行为等

注册用户数、在线用户数、日常压力、峰值压力、高峰期压力

1、产品、研发有明确需求

2、无明确需求,初次上线系统,需用同行系统数据,进行用户行为分析和商业数据结构的估算,利用性能估算推算,帮助决策,形成性能需求

3、无明确需求,已上线系统,通过运维获取tps和时间比例分布图、用户数和时间的分布图、数据库ER关系图、容量数据,得出性能需求

4、无明确需求,系统关键模块、性能隐患模块、用户敏感性能模块,确定性能需求

5、无明确需求,根据用户的使用行为,使用习惯,确定性能需求

6、无明确需求,参考系统历史3个月/6个月/1年数据、用户历史行为,预测未来数据,确定性能需求

7、无明确需求,进行峰值测试或稳定性测试,测出系统的性能瓶颈,评估是否达到预期。

 

需求分析

1、系统类型、特点、架构和设计

2、深入理解被测系统,确定系统的关键业务模块,从设计实现逻辑确认性能隐患的模块、用户敏感的性能模块、用户使用行为,整理测试思路、制定测试方案、产生测试场景

3、 如果没有明确的性能需求,则根据历史数据或类似系统,由项目组评估出性能指标;

4、进行峰值测试或稳定性测试,测出系统的性能瓶颈,评估是否达到预期。

 

测试准备

1、控制机、压测机、压测环境

2、测试数据、业务数据 、测试性能模拟的压力数据、

3、数据来自生产环境、最大可能模拟生产数据

4、根据经验预估的数据、根据历史数据预估的未来数据

 

环境准备

1、操作系统、服务器配置分析,需了解系统的架构和设计

2、了解cpu信息

3、用户量(PV、PU、业务量)

4、服务器重启重置环境,干净的系统环境,无运行程序和脚本

5、负载机环境

6、测试环境要尽量的模拟生产环境

 

压测场景模拟(模拟所有可能发生的极端的访问情况)

基准测试、日常压力测试、峰值压力测试、绝对并发测试、稳定性测试

压测策略 

       1、基准测试,一个用户循环压5分钟 获取系统在没有压力的情况下响应时间,为下一步测试性能拐点做比对

       2、负载测试,单个交易多个用户并发10,测试验证系统并发情况下是否有并发性的错误 应用锁 数据库锁

       3、容量测试,多个交易按一定比例去配比 再按一定的体度 一定的梯度10 20 30逐步去施压,到获得这个系统的性能拐点,资源站用达到很高 

       4、稳定性测试  一定压力下长时间运行稳定的能力,是不是存在内存泄露、数据库查询慢

 

1、疲劳压测(稳定性压测),持续压测5小时,测试性能指标

2、并发压测,单接口瞬间启动100线程并发,测试性能指标

3、日常压测,根据每日数据分析,如:500个用户在4小时内完成“每人发一个帖子、浏览十个帖子”的工作量,测试性能指标

4、业务压测,多接口业务流程压测,测试性能指标

5、峰值压测(极限压测),测试最大并发量,测试性能指标

6、阶梯压测,逐渐改变线程数进行压测,性能指标

7、大数据压测,数据量过大进行压测,性能指标

8、负载测试,分别压测50、100、150时,性能指标

9、数据库读写压测

案例:

1、比如购物:30个用户模拟登陆,10个用户浏览商品,30用户商品下单,20个查订单,10个做退出登录

2、25线程,5s后启动5个线程,再每隔5s启动5个线程运行10s,达到10线程运行20s,每隔3s停5个线程

3、2000用户在线登录状态,这2000用户中要达到100用户并发去访问首页,总的线程设置2000并发,其中95%的用户是登录状态,5%用户访问首页状态,采用固定定时器和吞吐量控制器

4、1w用户在线,模拟1w用户登录后操作一些系统中各个页面

5、【日常压力】活跃用户500人,每人每天发1帖子、浏览10帖子,平均每天产生500新帖子、浏览帖子5000次。用户使用论坛时间段集中在中午11点到1点和晚上18点到20点。每天的这些业务,实际分布在4个小时中完成的。那我们测试场景,就是要用500个用户在4小时内完成“每人发一个帖子、浏览十个帖子”的工作量,注意“平均每天……”、“分布在4个小时……”。这个场景测的是平均压力,也就是一个系统最平常一天的使用压力

6、【高峰期压力】比如“平均每天总的发帖量……”,那么就要查过去最高一 日的业务量。“分布在4个小时”也需要进行相应的修改,或查下历史分布图是否有更集中的分布,或用更简单通用80-20原则,80%工作在 20%时间内完成。根据这些数据可以再做适当的调整。

7、按照时间,使用递增的线程并发数来测试,比如每5分钟加5或10个线程,一直测试1小时,查看系统性能是如何波动的,这样就能基本找到产品的最大极限值即峰值、性能拐点

8、比如:一个系统日均1万人访问,一天平均3次/人,一般集中在每天晚上8点-10点,则我们可以算出每天1万人*3次/人=3万次请求,1天3万次请求集中在8点到10点3个小时之内,3万次请求集中在3小时之内,则平均每小时访问1万次请求,则每秒就是10000次/3600s大约为3次/s,即根据以往运营日志得出每秒钟3次请求,按照我们的并发峰值4倍的策略,则我们的性能指标可以定在4*3=12次/s,即我们的每秒处理事务数可以按照12次/s的基础来参考。

 

结果分析(硬件配置-操作系统-数据库-中间件-后端应用-前端应用)

1、服务器性能(哪些资源cpu占用过大、内存占用、硬盘占用、I/O读写)

2、Tps每秒处理事务个数 每个事务处理的平均时长

3、TPS(每秒处理请求数)、响应时间(服务器响应时间+网络时间)、错误率、QPS(每秒从服务器接收的数据量)

4、数据库(或中间件)非常慢了

5、中间件无响应

JVM堆内存用满,不停的进行GC,导致响应超慢(但是还没有OOM,否则就报错了)处理HTTP请求的线程,都被占用或者锁住

6、系统响应慢、超时、失败

7、服务器挂掉

8、网络(防火墙是否开启、端口的访问、宽带是否有被限制、路由寻址、网络的时延)

9、代码性能

10、定位分析问题:

        10-1、网络忙不忙 网络延迟大不大 网卡流量 是不是达到网卡瓶颈

        10-2、操作系统 应用服务器和数据库服务器资源cpu、内存占用、io读写

        10-3、数据库锁 运行等待等 

        10-4、应用系统日志死锁 wait 

        10-5、前端连接数是否正常 

        10-6、与运维确认是否开了流量控制

        10-7、再尝试重启应用服务器和数据库服务器

 

性能调优

1、扩充服务器(网路、cpu、内存、硬盘、显卡、I/o)

2、代码调优

3、中间件

4、分库、分表、主从分离、数据库结构优化、SQL优化、索引优化(建立主键或唯一索引、使用联合索引)

     4.1、SQL优化

             大表 左关联 小表,很慢;小表 左关联 大表,很快

              嵌套的子查询是很慢

5、多个服务器负载均衡、使用缓存服务器

6、设置虚拟内存

7、运维设置限流

8、添加缓存、图片资源压缩

 

测试报告

性能测试比对 1 每次版本性能测试比对 2 机器横向增加 ,增加前后性能测试的比对 3 性能优化 优化前后的性能测试比对

 

如何确定系统性能测试tps需求标准?

已上线项目

查看过去1周(或1月)内,接口调用量最高的1天,然后再找当天接口调用量最高的时间点(分钟级别),比如在12:10调用量为10000,换算为每秒调用量10000/60=166,因此可以确定这个接口tps只要达到166即可满足。

未上线项目

二八定律(无历史数据参考) (日活用户*总请求数*80%)/(24h-(0-6h)*3600秒*20%)*系数(2-5之间)=tps

1、先预估系统每日总请求数,如果没有历史数据参考,一般是通过用户量或者其他关联系统来评估。

比如某网站新增每日签到送积分功能,网站注册用户1000w,日活跃用户100w左右,最极端情况下,这100w人都会来签到(实际不会这么多人来签到,评估指标要尽量往高评,以免出现极端情况),那么每天大概有100w次签到请求,80%的请求数就是100w*0.8=80w。

2、再确定系统20%时间,大多数系统是24小时对外提供服务的(比如政府类项目,在一天某个时间段提供服务)。

一般系统0点-6点之间访问量很少,从一天总访问量来看,可忽略不计。那20%的时间=(24-6h)*3600s*20%=12960秒。

3、最终计算出来的结果为80w请求/12960秒=61左右。也就是说接口TPS满足61即可。

4、最后再乘以一个冗余系数2-5之间,提高预期指标,防止人为评估造成预期指标偏低情况。

可以通过对项目接口的峰值监控,来对比之前评估的算法结果,调整冗余系数,最终随着不断的数据积累,将会形成一套本项目的性能模型。

 

 

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

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

相关文章

条件编译 #ifndef _HEAD_H...中下划线的理解

1.下划线“__”属于编程风格的内容,对程序没有影响。不用下划线也可以,用几个下划线也由个人习惯。 2.其实质是一个宏名。由此我们可以防止发生重复定义或声明。 假设你的头文件名为head.h,根据习惯,我们声明一个宏HEAD_H,对应这…

java如何禁用usb_IT技巧分享59: 如何禁用USB端口以及光驱来保证数据不被泄露

现在电脑USB接口是最基本的一个配置,能快速的把电脑文件拷贝到u盘或者移动硬盘,大大的提高了我们的工作效率,但也容易感染病毒,把公司商业机密泄露出去,为了加强公司安全措施,现提供禁用USB办法。操作步骤&…

mysql原理--连接查询的成本

1.准备工作 连接查询至少是要有两个表的,只有一个 single_table 表是不够的,所以为了故事的顺利发展,我们直接构造一个和 single_table 表一模一样的 single_table2 表。为了简便起见,我们把 single_table 表称为 s1 表&#xff0…

jmeter模拟压测真实复杂用户场景,阶梯螺纹线程组Stepping Thread Group终极线程Ultimate Thread Group并发线程Concurrency Thread Group

我们有时需要模拟非常真实复杂的用户压测场景,可以用到此插件来设计场景 1、安装插件,选项——Plugins Manager打开安装页面 2、搜索standard set并安装,重启jmeter,查看测试计划——添加线程组——jpgc - Stepping Thread Group…

防止文件重复定义之方法

防止重复定义用#ifndef #define #endif 若文件为类中成员函数可以直接使用 若文件为函数,若函数的声明和定义放在一起,则只能采用static或者inline方法解决。用#ifndef不管用 若文件为函数时,函数的声明和定义分别放在.h和.cpp中&#xff…

部署java项目_企业最看重什么样的Java人才?

很多人学习Java真的不是为了梦想,不是爱好,仅仅是想成为拿到高薪的那个人,成为同学里赚的最多的人,成为别人嘴里谈着的那个人。要成为拿高薪的Java工程师,我们要先看看企业到底需要哪方面的人才。上图是某招聘网站上Ja…

jmeter如何通过后置处理器提取(正则提取器、json提取器)做接口关联?

一、后置处理器—正则表达式提取器 1、添加正则表达式提取 2、正则表达式提取面板介绍: 引用名称:提取引用名称,下个请求要引用此参数名称,如填写token,下个请求中用${token} 正则表达式:():括…

数据结构树4-二叉搜索树2

二叉搜索树.h: #ifndef _二叉查找树_H #define _二叉查找树_H #include<iostream> #include<string>enum Boolean{ FALSE,TRUE}; template<class Type> class Element { public:Type key;//方便添加更新数据 }; // 错误我的写法&#xff1a;template<c…

mixin机制 vue_vue mixins组件复用的几种方式(小结)

最近在做项目的时候&#xff0c;研究了mixins&#xff0c;此功能有妙处。用的时候有这样一个场景&#xff0c;页面的风格不同&#xff0c;但是执行的方法&#xff0c;和需要的数据非常的相似。我们是否要写两种组件呢&#xff1f;还是保留一个并且然后另个一并兼容另一个呢&…

【功能业务篇】APP授权微信登录、绑定账号测试思考

参考https://open.weixin.qq.com/cgi-bin/showdocument?actiondir_list&tresource/res_list&verify1&idopen1419317851&token&langzh_CN 准备工作 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登…

数据结构-树3-红黑树

1、刚开始建立的红黑树的红黑树只有一个指针&#xff08;实际为结点&#xff0c;它的右子树指向真正的根结点&#xff08;现在指向空结点&#xff09;。左子树为空结点&#xff0c;里面的数据为负无穷大&#xff09; 2、实现Insert函数

比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...

最早见到华为的HiCar&#xff0c;还是今年4月份的华为P40系列手机发布会。根据发布会公布的信息&#xff0c;HiCar主要的特点就是手机与汽车的顺畅连接体验。借由5G手机&#xff0c;汽车可以实现更强的数据传输能力&#xff0c;同时百万级别的手机APP也会扩展至汽车之上。在这次…

Python模拟实现multipart/form-data格式上传图片文件

一、单字段发送单个文件 url "http://httpbin.org/post" data None files { ... } r requests.post(url, data, filesfiles) 而这个files参数是可以接受很多种形式的数据&#xff0c;最基本的2种形式为字典类型和元祖列表类型 1、字典类型的files参数 { &q…

tensorflow9-mnist手写数字识别进阶-多层神经网络建模

大圆为一个神经元模型 全连接&#xff1a;相邻的两层之间所有的结点都会连接 神经网络的层数&#xff1a;一般指的谁隐藏层的数量 上图中的网络即为一层神经网络 以上即为两层的全连接神经网络 两层神经网络模型训练 神经网络的层次是不是越多越好&#xff1f;并不是越多越好…

arm9 中断向量 重定位_关于STM32中断向量表的位置 、重定向问题

关于STM32中断向量表的位置、重定向问题首先我们需要跳到main函数&#xff0c;这个就不多说了。那么&#xff0c;中断发生后&#xff0c;又是怎么跑到中断入口地址的呢&#xff1f;从stm32f10x.s可以看到&#xff0c;已经定义好了一大堆的中断响应函数&#xff0c;这就是中断向…

BurpSuit配置抓包http和https请求

1、下载安装burpsuit https://portswigger.net/burp/communitydownload 双击一直点下一步&#xff0c;可安装成功 2、burpsuit设置 2、浏览器设置代理 设置-高级-打开代理设置-局域网设置 3、这样可以抓取http包了 4、Burp Suite要抓HTTPS的包&#xff0c;是需要有Burp Sui…

TensorFlow10-多层神经网络建模,存储和载入

整体流程&#xff1a; 只保存最近5个模型 playground.tensorflow.org TensorFlow浏览器训练网址

手机突然电量消耗很快_手机掉电突然变快?这5点操作你肯定至少做了其中一个!...

许多人都遇到过手机掉电突然变快的情况。以前充一次电&#xff0c;明明可以用一整天的&#xff0c;某天突然发现&#xff0c;满电的手机没打几局游戏或才看一会电视&#xff0c;电量就没了一大半&#xff0c;一天充好几次都不够用。每每遇到这种情况时&#xff0c;很多人都觉得…

Python史上最简单5行代码群发邮件Zmail模块

zmail简介 Zmail 允许你发送和接受邮件尽可能的简单。你不需要去检查你的服务器地址、端口以及自己构造MIME对象&#xff0c;使用Zmail&#xff0c;你只需要关注你的邮件内容即可。Zmail只在python3中运行&#xff0c;不需要第三方模块。不支持python2 Zmail的优势 自动填充…

TensorFlow11CNN和全卷积神经网络

应用&#xff1a;图像分类&#xff0c;物体识别&#xff0c;看图说话 卷积神经网络的基本结构