一、前期知识
1. 性能测试:通过工具或者是协议实现的多线程的接口测试。通过获取的数据,分析系统的软硬件瓶颈,进行性能调优
2. 性能测试的核心原理:
1. 基于协议 2. 多线程 3. 模拟真实场景
3. 系统出现性能问题的原因:
1. 系统长时间运行,没有很好的资源回收机制
2. 并发用户数增加,没有更多的软、硬件资源来处理相应的请求
4. 最大用户数:是一个系统是否能正常运行的临界值
并发用户数:同时对服务器产生请求的用户总数
吞吐量:在一次性能测试过程中网络上传输的数据量的总和
吞吐率:单位时间内处理客户请求数量
事务:用户某一步或几步操作的集合
TPS(每秒事务数):每秒系统能够处理事务数量
点击率:每秒钟用户向服务器提交的HTTP请求数
响应时间:从用户单击开始到应用系统把本次操作的结果以用户识别的方式展示出来,这个过程所消耗的时间
5. 资源利用率在60-80%是最好的
6. 性能测试要测什么
负载测试:在一定的软硬件环境下,通过调整负载的方式(并发数),来获取不同负载情况下系统软硬件的各种指标,来发现系统中存在的问题
压力测试:在一定的软硬件环境下,不断的给系统施加压力(增加并发数),使服务器的资源处于极限状态下长时间运行,用以测试服务器在该负载的情况下是否能
稳定工作
容量测试:对数据库进行测试。收集数据库承受的压力指标。并分析瓶颈
基准测试:在新项目部署或者新版本发布,对当前的软硬件环境摸底
配置测试:在一定压力下,获取不同配置的性能指标,用于选择最佳配置
疲劳测试:在一定的压力下,做长时间的测试。7*24小时。查看服务器的稳定性
7. 性能测试的指标
1. 响应时间
2. 吞吐量
3. 资源利用率:cpu使用率、内存使用率、磁盘、网络
4. TPS
二、性能测试流程
1. 分析:分析性能测试需求,确定性能指标
测试需求举例:
1. 新系统能力验证
比如,你们刚好开发了一个新系统,在上线前需要验证系统性能。这种情况比较简单;你可以有更多的自由选择测试环境、压力点和测试工具;测试策略上
也比较灵活。并且如果性能测试结果没有明显的短板,也不需要进行调优
2. 客户有明确要求
这是一个好的结果,这说明客户对性能测试有一定的了解,知道他们需要的系统要达到一个什么样的标准。如:系统要求同时满足100用户登陆,平均每个
用户登陆时间不能超过5秒。这个需求很明确,当然也不排除一些不懂装懂的用户,提一些不现实的要求。不管怎么说,用户提要求了,这个比较容易,你可以
对现系统做一次性能测试,至于,是通过优化系统还是增加硬件设备才能达到要求。就不是测试考虑的问题了
3. 找出系统性能瓶颈
这个需求的目的就很明确了,目的就是找出系统的性能瓶颈,进行调优或硬件扩容,所以性能测试的重点在系统的架构分析和业务分析上面
4. 稳定性验证(强度测试)
稳定性是系统的一个重要指标,因为系统一旦上线,就有可能会长期处在用户的访问状态,可能以前没发现的一些问题就会暴漏出来。比较典型的就是内存
溢出,这种需求在测试策略上就要考虑性能测试的运行时长
2. 设计:设计性能测试方案
3. 实现:性能测试脚本、数据的准备,测试场景、环境的搭建
4. 执行:执行测试脚本(联机负载)、整理测试数据
5. 分析:对测试数据、图形进行分析,找出系统瓶颈,进行性能调优,回归测试
6. 维护:维护测试脚本、测试工具(框架)
三、性能调优
1. 一般系统的瓶颈
1. 硬件上的性能瓶颈:
一般指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈
(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。
2. 应用软件上的性能瓶颈:
一般指的是应用服务器、web 服务器等应用软件,还包括数据库系统。
3. 应用程序上的性能瓶颈:
一般指的是开发人员新开发出来的应用程序。
例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够),造成系统在大量用户访问时性能低下而造成的瓶颈。
4. 操作系统上的性能瓶颈:
一般指的是windows、UNIX、Linux等操作系统。
例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操
作系统上出现性能瓶颈。
5. 网络设备上的性能瓶颈:
一般指的是防火墙、动态负载均衡器、交换机等设备。
例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他
负载较轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的作用,这时可以认为网络瓶颈。 性能测试出现的原因及其定位十分复杂,这里只是简
单介绍常见的几种瓶颈类型和特征,而性能测试所需要做的就是根据各种情况因素综合考虑,然后协助开发人员\DBA\运维人员一起定位性能瓶颈。
2. 一般性能调优步骤
1. 确定问题
应用程序代码:在通常情况下,很多程序的性能问题都是写出来的,因此对于发现瓶颈的模块,应该首先检查一下代码。
数据库配置:经常引起整个系统运行缓慢,一些诸如oracle 的大型数据库都是需要DBA进行正确的参数调整才能投产的。
操作系统配置:不合理就可能引起系统瓶颈。
硬件设置:硬盘速度、内存大小等都是容易引起瓶颈的原因,因此这些都是分析的重点。
网络:网络负载过重导致网络冲突和网络延迟。
2. 分析问题
当确定了问题之后,我们要明确这个问题影响的是响应时间吞吐量,还是其他问题?是多数用户还是少数用户遇到了问题?如果是少数用户,这几个用户与其
它用户的操作有什么不用?系统资源监控的结果是否正常?CPU的使用是否到达极限?I/O 情况如何?问题是否集中在某一类模块中? 是客户端还是服务器出现问
题? 系统硬件配置是否够用?实际负载是否超过了系统的负载能力? 是否未对系统进行优化?
通过这些分析及一些与系统相关的问题,可以对系统瓶颈有更深入的了解,进而分析出真正的原因。
3. 确定调整目标和解决方案
得高系统吞吐量,缩短响应时间,更好地支持并发。
4. 测试解决方案
对通过解决方案调优后的系统进行基准测试。(基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量
的和可对比的测试)
5. 分析调优结果
系统调优是否达到或者超出了预定目标?系统是整体性能得到了改善,还是以系统某部分性能来解决其他问题。调优是否可以结束了。