发生性能事故的原因:
- 并发的用户量突然增加
- 性能测试做的不充分
- 做性能测试时对并发预测的不准确
性能测试的目的:
- 熟知系统的性能,交付高质量的系统
- 性能事故造成的后果都很严重,性能测试可以降低成本,降低风险
性能测试分类:
- 负载:找到系统的最大有效用户量(正常)
- 压力:一定把系统测出问题来,找到系统的瓶颈(系统崩溃的节点)
- 并发:找到系统某个功能的最大用户量(正常)
- 稳定性:长时间运行时系统要满足客户的需要(正常)
- 失效恢复测试:针对有冗余备份或者有负载均衡的系统进行的,当某个设备宕机后,系统能否正常的提供业务
- 基准测试:把一组性能测试数据作为基准,然后修改软硬件环境,查看不同的软硬件环境对系统性能的影响
- 配置测试:软件配置对系统性能的影响
性能测试:
就是通过一定的方式对被测系统按照一定的测试策略施加压力,获取系统的响应时间,吞吐量,TPS(每秒事务数),资源利用率等性能指标,检测系统上线后能否满足用户需求的过程
- 工具:jmeter,loadrunner,locust
- 测试策略:逐渐加压,突然加压
- 压力:大量请求
影响性能的原因;
- 硬件:
- CPU的处理能力
- 内存的大小(内存泄漏,内存溢出,内存不足)
- 硬盘(固态,机械硬盘)
- 网卡(百兆和千兆)
- 网络
- 带宽
- 网络稳定性
- 被测系统
- 算法
- 代码深度(迭代,递归)
- 资源回收与利用
- 代码逻辑
- 配置
- JVM配置(栈,堆大小,垃圾回收机制)
- 数据库连接池配置(最大连接数量,空闲连接时间)
- 线程池
- 消息队列配置
- 数据库
- 表中数据量大小(是否需要分库分表)
- 慢SQL(关联查询,子查询)
- 数据库索引(是否合理)
- 表结构(是否合理,冷热数据[
数据的冷和热取决与该字段的使用频率
])
- 中间件
- 系统架构
- 中间件的选择
性能测试开展时间:
功能稳定后开展
相关术语:
-
并发:
- 侠义:一段时间内,大量用户请求同一个接口
- 广义:一段时间内,大量的用户访问系统
-
用户量:
-
系统用户量:注册的用户
-
在线用户量:登录系统的用户
-
并发用户量:使用系统的用户
-
在线用户n,平均并发用户C
-
C=nL/T
-
n:一天内使用系统的用户量(比如100万用户)
-
L:平均一次使用的时长 (比如用户登录系统后平均操作4分钟)
-
T:系统一天中频繁使用的时长 比如白天12小时(忽略晚上用户量很少的时段)
-
-
-
集合点:同步定时器
-
事务:将多个操作绑在一起,同时成功或失败
-
TPS事务率:单位时间内处理事务的量
-
RPS请求率:单位时间内处理请求的量
-
QPS查询率:单位时间内处理查询的量
-
RT:响应时间
-
ART:平均响应时间
-
2-5-8原则(根据响应时间不同区分)
-
吞吐量:一次测试过程中,系统能处理的数据量
-
吞吐率:单位时间内,系统能处理的数据量
-
思考时间:模拟用户的思考时间(固定计时器,随机计时器)
性能指标:
响应时间RT,吞吐率,TRS事务率,并发用户数,资源的利用率(CPU,内存,网络,硬盘),异常率
App系统额外的性能指标:耗电量,流量使用,弱网,启动时间,流畅度等