性能测试简谈

  1. 我们先了解一下,为什么要做性能测试:

游戏行业:某游戏上线新功能,目标是全服游戏群体,结果上线后,先后出现了服务器崩溃,游戏功能图标加载缓慢等问题,导致玩家怨声载道,为此,游戏运营商不得不发放了许多奖励。具体损失不表,为赶进度而发布的功能,也因为生产事故导致延期更长的时间

这就是典型的没有进行性能测试,或者说性能测试不充分导致出现的生产事故。在游戏行业还比较好,毕竟损失的只是虚拟的货币和玩家的游戏热情
通过这个案例,我们知道,在一些极限的场景下,软件和硬件会造成极大的破坏和损失,因此,我们需要进行性能测试,来验证软件在高压力下,高并发下,高负载下的实际工作情况。

  1. 什么是性能测试

性能测试就是模拟一些极端场景,对软/硬件性能进行测试,判断其极限性能和在极限性能边界上的运行状态。

设计性能测试场景,主要有以下场景:

– 基准测试:了解系统在静置时的资源消耗,如cpu,io,网络带宽,网络连接的情况。如果有干扰,务必排除。

– 单次连续请求测试:1次连续请求情况下的tps(Transaction Per Second 每秒事务请求数),响应时间,服务器资源消耗情况,主要用于参考。

– 负载测试:逐渐增加并发请求数,查看tps,响应时间,错误率,服务器资源消耗情况,主要用于分析最大性能。

– 压力测试:在最大性能的临界点上保持压力进行测试,查看服务器在高压力情况的处理情况。

– 稳定性测试:连续xx天内,在一定的并发下进行测试,查看服务器运行情况是否能达到需求设计

性能测试流程可以简单的划分为4个阶段:

性能需求分析阶段

准备阶段

执行阶段

报告和总结阶段

三. 第三步 —— 了解性能测试需要用到的技术

性能测试原理介绍:

性能测试,本质就是模拟客户端请求,对服务器进行高并发,高流量的压力测试,从而验证服务器提供服务的能力,并找出瓶颈点,提出或者进行优化

问题:
怎么模拟高并发,高流量?怎么进行性能优化?
怎么模拟高并发:
– 使用多线程技术,模拟高并发。
– 如果并发太高,如10w并发以上,则需要使用负载均衡和分布式处理技术,jmeter工具支持多台机器作为负载机。

怎么模拟高流量:
– 在每个请求中塞入大量数据即可
jmter各项指标
Jmeter指标:(由于Apache旗下性能测试工具Jmeter收集的性能指标偏少,下面的数据选取代表性指标)
 1.Average/ms:服务器处理事物平均响应时间(表示客户端请求到服务器处理信息且反馈客户端的时间
 2.Throughput/s:服务器每秒处理请求数,也叫吞吐量(表示服务器每秒处理客户端请求数(单位:个/秒))
 3.KB/s:服务器每秒接受到的数据流量(表示服务器每秒接受到客户端请求的数据量KB表示)
4, Median:中位数,也就是50%用户的响应时间
5, 90%Line:90%用户的响应时间
6,Min:最小响应时间
7,Max:最大的响应时间
8 ,Error%:本次测试中出现错误的请求的数量/请求的总数
 硬件指标: 
       1.%Processor time : CUP使用率(平均低于75%,低于50%更佳)
2.System:Processor Queue Length :CUP队列中的线程数(每个处理器平均低于2)
3.Memory:Pages/sec :内存错误页数(平均低于20,低于15更佳
4.Physical Disk-%Disk Time: 磁盘使用率(平均低于50%)
 5.SQL Server:Buffer Manager-Buffer Cache Hit Ratio: (在缓冲区告诉缓存中找到而不需要从磁
盘中读取的页的百分比,正常情况次比率超过90%,理想状态接近99%)

QPS(每秒查询率Query Per Second)= 并发数/平均响应时间
服务器在一秒的时间内处理了多少个请求,数字越大代表服务器的负荷越高、处理能力越强。
硬件性能分析结果 请细看如下博文
https://blog.csdn.net/qq_34659777/article/details/86575748?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
怎么进行性能优化
那么怎么提升性能呢?我们首先介绍一个衡量性能标准的一个参数:TPS(Transaction Per Second 每秒事务请求数,数字越大代表服务器的负荷越高、处理能力越强。)。
我们再看一下TPS计算公式:
TPS = 总请求数/ 平均响应时间
总请求数:在一段时间内发送的所有请求数量
平均响应时间:所有请求的平均响应时间
通过这个公式,我们可以知道,当分母越小时,TPS越大。所以要提升性能,我们只需要提高平均响应时间就可以了。那么怎么减少平均响应时间呢?
提高网络传输速率,服务器内部处理速率,数据库处理速率,客户端处理速率,其中客户端处理速度也和服务端优化策略基本相同
性能优化:

网络传输速率的提高:

1,采用光纤,配置路由表,缩短网络传输距离与路由器跃点数量。

2,如果是实时服务,那么需要配置缓存服务器,尽量避免缓存穿透

服务器内部处理速率的提高:

计算密集型:优化思路是提高CPU利用率,采用多线程的思路进行。但是线程数量不能超过cpu核心数。因为线程数量超过cpu核心数后,cpu会分片执行超过部分的线程,会增加cpu读取线程缓存的压力,使计算能力下降

IO密集型:

– 优化思路是提高存储的效率,如使用固态硬盘,阵列,分布式等技术。

– 由于IO密集型中,CPU可能会等待IO操作完成。所以我们可以使用超过CPU核心数的线程来访问IO,从而提高性能(但如果磁盘繁忙,线程数再多也只是在磁盘队列中排队,增加CPU线程数来访问IO的方法,适用于IO读/写操作并不繁忙,但是需要长时间寻址的场景)

– 注意:因为磁盘内部只有1个线程处理IO操作,所以要真正实现磁盘的并发,需要使用多个磁盘,也就是磁盘阵列

数据库处理速率:

数据库直接和IO进行交互,所以提高IO性能,能提高数据库性能。

数据库有自己的数据结构,所以优化数据存储和查询的相关算法,也能提高数据库性能

索引优化

缓存优化

数据库连接优化

数据库查询语句优化

分表分库

分布式处理
思维导图如下:
在这里插入图片描述

性能监控

我们要分析数据,就必须得到数据,所以需要性能监控工具来采集和展示数据,才能进行分析。

那么我们要怎么进行监控呢?这里我们可以借助已经实现的工具来进行。

Linux:

可以使用sysstat工具包中的sar命令来监控CPU,内存,IO,网络的运行情况
可以使用ps命令查看线程运行情况

JAVA:可以使用jstack,jprofile,jstat,jmap,jps工具来进行查看,这是java自带的工具包,用于分析java的堆栈信息

Windows:

可以使用widnows自带的资源监视器监控和采集数据

数据库监控:

mysql数据库有自带的监控工具,但是收费

可以使用免费的工具进行监控,如innotop

可以使用综合能力强大的工具监控,如zabbix(也能监控服务端)

其他:

前端性能监控:Yslow,谷歌开发者模式->performance,使用windows.performance 进行定制化开发

Android监控:

– 网易开源的Emmagee,

– 腾讯开源的GT,

– 科大讯飞的iTest,

– Google的开源Battery

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值