论坛:lemfix.com/lemon
http://lemfix.com/topics/43436
http://lemfix.com/topics/43435
1.软件应该关注哪些性能
a. 企业关注哪些性能
关注点 | 性能 | 性能指标 |
---|---|---|
服务器利用情况 | 资源利用率 | |
能支持的最大用户数 | 系统容量 | |
能支持的最大并发用户 | 并发用户数 | |
是不是可以更换硬件提供性能 | 可扩展性 | |
能不能持续运行长时间不宕机 | 稳定性 |
b. 开发人员关注哪些性能
关注点 | 性能 | 性能指标 |
---|---|---|
架构设计是否合理 | 系统架构 | |
数据库设计 | 数据库 | |
代码逻辑 | 代码 | |
线程,异步,同步,队列 | 实现技术 | |
资源配置 | 稳定性 |
架构如何调整--》需要性能测试人员人提供改进方法??
数据库设计-》有效索引,分表分区-》性能测试人员提供方案?
代码逻辑-》找到存在性能问题的代码?
电商支付宝支付是异步方式
同步异步是什么意思???----后续补充
2. 性能测试主要指标
性能测试,一定是要多用户,1个人不能叫性能测试。多人一起发起接口请求,才会出现并发。
(1) 并发
狭义上:指同一时间点执行相同的操作(秒杀)
广义上:指同一时间点执行不同的操作也叫并发
如:同一时间点,有人正在点击登陆,有人正在打开登陆页等
同一时间点发起不同的请求也叫并发因为对服务器来说要同时处理同一时间点发过来的请求
(2)并发用户数(重要指标):
什么是并发用户数:同一时间点,执行相同请求的用户数
在Jmeter中一般用线程数来模拟用户数。发起方的线程数一般在1k-1.5k,超过2k,会报错。(这个与电脑配置高低是没有关系的)
疑问:相同的操作指的是访问同一个接口吗?答:不是的。
因为请求有先有后,所以不是指同一个接口,一般并发指的是广义上的并发,如果要实现狭义上的并发需要使用集合点。
集合点:
举例子说明:操场跑步,设置一个栏杆,谁先到栏杆就在栏杆处等其他人员也到达栏杆,待人员都到达目的地,再释放栏杆,从而实现真正意义上的并发,从而也避免了同一时间点发起不同的请求
(3)事务(Transaction)
指一个客户机向服务器发起请求然后服务器做出反应的过程
一个客户机代表的就是一个人
一个事务可以有1个接口请求或者多个接口请求
比如:用户登录,选购商品,加入购物车,支付,这样的一整个过程我可以定义为一个事
事务可以自己定义:你可以定义一个事务就是一个接口请求,也可以定义一个事务是多个接口请求
Jmeter中默认一个接口一次请求就是一个事务。不过也可以通过事务控制器,自己定义一个事务挂多个接口组成一个业务流
(4)响应时间(RT)(重要指标)
从发起请求到收到请求响应的时间
RT=发起请求网络传输时间+服务器处理时间+返回响应网络传输时间
做性能测试一定不能用vpn,内网切外网,堡垒机,wifi等或者用生产环境(除电信产品外),最好在局域网有线直连,从而避免网络传输时间过长,这样得到的响应时间最接近服务器的处理时间
问题:
1.为什么要避免网络传输时间-----?????
这是因为:我们最关心的就是服务器的处理时间,只有当网络传输时间足够的小,RT才能无限接近服务器处理时间,所以我们要尽可能的降低网络的延时时间,尽量使用有线网络或者独立网络。
2.为什么不能使用无线网做性能测试(电信产品除外)?
答:不管是局域网下面的wifi,还是非局域网下面的wifi,都是不可以的。
比如你开了一个wifi热点出来,多个人都连接这个热点,这样是不行的。
使用wifi首先不能保证稳定性,其次是wifi的带宽是无法控制的。频道一直变化,导致带宽不是固定的。
在现在的企业中,除非做视频,文件存储,才可能要重点关注网络瓶颈,一般的企业,网络瓶颈概率比较低。
(5)TPS、QPS、rps
TPS(Transaction per Second): 服务器每秒处理事务数,衡量服务器处理能力的最主要指标
QPS(Queries per Second): 每秒的查询率
差异: 一个接口请求可能有多个Queries,如访问网页
rps:请求率,每秒钟请求多少次。一个接口如果是一个tps,那么tps等于rps
hps:点击率。
总结:QPS,RPS,HPS 是从用户的角度来定义性能指标。tps是服务端的性能指标
疑问:
1.事务数可以是一个请求,也可以是挂多个接口请求,那么TPS应该以一个事务就是一个接口请求,还是以多个接口请求来计算TPS的值,哪种情况得到的TPS才能代表服务器的处理能力?
答:请大家思考
2.QPS理解
答:自行思考,后续补充
一个接口有多少个查询?这个要看具体的接口,比如登录的接口到底查询了多少次,这个要怎么看登陆接口查询了多少次?
(6)吞吐量(Throughput)
概念:单位时间内处理的请求数(事务/秒)
如:港口吞吐量,一年5千万标准集装箱
吞吐量和TPS概念很相近,两个区别:
1.吞吐量用来衡量网络的指标
2. TPS用来衡量服务器的处理能力
一个事务默认一个请求,在理想的网络下(即服务器处理一个请求,网络就传输一个请求),吞吐量可能与TPS相等,网络不理想的情况下,服务器处理完3个请求,网络却只能传输1个请求,这种情况,TPS是不是会大于吞吐量?
一个事务有多个请求,在理想的网络下(服务器处理完多个请求,网络同时传输多个请求),吞吐量与TPS是不相等的(这种情况下,吞吐量是不是大于事务数?)
总结:在没有网络瓶颈时且在并发数据不变的情况下,吞吐量的数值和tps数值相等
(7)吞吐率
概念:单位时间通过的数据的平均速率(kB/s)
或者单位时间传入的数据量
如:港口日吞吐率,年吞吐量/365天
问题:
(1)吞吐量是单位时间,吞吐率也是单位时间,比如是每秒处理的请求数是10个请求
那么吞吐率怎么算?10/1(kb/s)???------答:吞吐量是10,吞吐率是10kb/s
(2)理想吞吐率换算
1B=8bit
1Mb/s=1024kb/s=1024/8 KB/s=128 KB/s
1兆的网络,最理想的吞吐率是128KB/s
(8)点击率(Hit per Second)
概念:每秒点击数
点击率如何计算??web端性能测试时。要模拟用户点击,这个点击率才会关心,接口性能测试不需要。
(9)资源利用率
概念: 指被测服务器资源的使用情况,比如服务器(应用及数据库)的cpu利用率,内存利用率,磁盘利用率,网络宽带利用率等。
cpu利用率
内存利用率
磁盘I/O
一般都不要超过80%
服务器如果是16核cpu,不能看单核的cpu使用率,单核可以超出100%。
2.性能测试步骤
(1)性能测试准备
a1. 需求分析------》熟悉业务,不能完全听信需求文档,因为有些功能无法做性能测试,要测试的功能不能转换成性能指标,就无法做性能测试。
a2. 明确性能测试目标(指标值)
a3.了解软件功能,架构--------》产品之间有几个服务,需要搞清楚数据流,否则无法搭建性能测试环境,以及出现性能瓶颈,无法定位是哪个服务(项目经理,架构师,开发帮忙)
a4. 指定测试计划,做好工作量评估
a5. 制定测试模型(编辑测试用例)
测试模型核心是场景,但是不等于场景,因为还包括工具选定,性能指标分析等
( 2)搭建性能测试环境
a1.工具选型与准备
a2.被测系统环境搭建(服务器,服务器版本更新,数据库数据准备)
性能测试环境需要独立,不能与自动化,功能共用一个环境(避免相互干扰)
a3.网络配置
( 3)性能测试脚本开发
a1.选取协议
a2.制作脚本
a3.调试脚本
a4.验证脚本
(4)性能测试脚本执行
a1.试运行
a2.场景执行
(5)结果分析与调优
a1.分析依据:结果图表
a2.分析思路:服务器硬件瓶颈-》网络瓶颈-》服务器os瓶颈(参数配置,数据库,web服务器)->应用瓶颈(sql语句,数据库设计,业务逻辑,算法)
查看tomcat8080端口连接数命令
netstat -anp | grep 8080 | wc-l
查看tomcat8080端口当前活动的连接数(没有释放的连接数)
netstat -anp | grep 8080 | grep ESTAB | wc-l
a3.调优
a4.修改脚本或场景
(6)测试报告与结果跟踪
a1.性能测试报告
a2.性能测试问题跟踪
3.开展性能测试必备条件
a1.网略要求: 内网(zoom域) 外网 独立分开,千万不要用跨内网外网(比如公司用云服务器,那么是不能做性能测试的,因为云服务器核公司网络是跨域的)
公网外网:公司的网络就是内网,用公司的网络访问百度,百度就是外网
a2.独立环境 功能测试不能和性能测试共用环境
自己搭建一套与生产硬件资源相同的服务器,比如生产服务器是8核的,内存是64g的,那么测试环境服务器也要是相同的配置。