大家好,又见面了,我是全栈君。
基准測试的目的
基准測试是为了找出系统的瓶颈,包含:
- 硬件
磁盘、内存、网络等。 - 操作系统
文件系统、内存管理、驱动、调度等。 - RDBMS
SQL层、存储引擎层。 - Schema设计
索引、表结构、数据类型。 - Query
Query写的不好、逻辑错误。 - 应用程序问题
- 系统各部分之间的交互
磁盘IO、RAM、RDBMS等。 - 測量值
怎样測量?哪里最花时间?哪个组件最忙? - 找出造成瓶颈的原因
系统測试计划的需求
- 选择正确的硬件和软件 ;
- 理解系统的行为 ;
- 理解系统的性能 。
- 对系统做正确调优和配置 ;
- 识别系统的优缺点 ;
- 定位系统的薄弱点 ;
- 计划未来的增长量 ;
- 计划可能发生的特殊事件 ;
- 理解系统的伸缩性。
哪些要做基准測试?
- 完整測试
- 对全部的基础设施做測试,Webserver、应用程序、缓存层、数据库、网络、外部资源等;
- 这样的方法提供了一个完整的全貌,但非常难以实现;
- 结果复杂难以理解。有可能会误导。
- 单个组件
- 只基准測试基础设施的单个组件;
- easy实现。但可能会忽略真正的瓶颈。
- 结果easy理解。
单个组件的基准測试的比較须要考虑OS配置、硬件、DB系统、參数、Schema、查询及工作负载。
基准測试计划指南
- 定义基准前的目标。
- 了解可反复生成的工作负载;
- 记录全部的信息,甚至看起来可能没实用的。包含硬件信息、配置、版本号、表大小等;
- 创建基线。每个基准。都是未来的基线。
- 定义基准測试后的目标;
- 仅在同一时间改动一个配置,并返回基准结果。
基准測试的类型
- 性能測试类型
- 压力測试
- 负载測试
- 耐久性測试
- 峰值測试
- 压力測试
測试系统的极限。包含
- 使用极限负载
- 定义上限
- 定义容量
- 负载測试
測试系统可承受的负载。包含:
- 用户数量
- 事务数量
- 数据库大小
- 耐久性測试
和负载測试相似,仿真可持续的时间,在较长的时间段内測试系统的稳定性。 - 峰值測试
- 測试工作负载的突然变化;
- 定义在当前环境下的系统行为。比如:
- 不影响系统的情况下处理峰值;
- 性能将会减少;
- 系统将停止/失败/崩溃。
性能測试的目的
- 在基准測试前必须规划;
- 验证系统是否满足规定的标准;
- 比較两个系统;
- 隔离系统中性能差的组件。
- 高吞吐量;
- 低延迟;
- 面对伸缩时的稳定性;
- 面对并发时的稳定性。
吞吐量
- 是广泛使用的測量值,指的是单位时间(秒或分钟)内成功的事务数量;
- 通常只关注平均值;
- 广泛用于市场上的比較;
- 对压力測试非常重要。
延迟
- 完毕一个事务所需的总时间;
- 最小/平均/最大响应时间。
- 对负载測试非常重要。
面对伸缩时的稳定性
- 測量系统伸缩时的表现。
- 在成为严重问题前发现薄弱点;
- 对容量规划非常实用;
- 经常使用于耐久性測试。
面对并发时的稳定性
- 測量线程数或连接数改变时系统的表现;
- 用于找出线程数量的上限,并引入队列;
- 经常使用于峰值測试。
參考:《Understanding Performance through Measurement, Benchmarking and Profiling》
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115477.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...