[转帖]性能关键指标及模型分析-QPS,RT

性能,关键,指标,模型,分析,qps,rt · 浏览次数 : 0

小编点评

**RT(Response-time、响应时间):** RT是指用户请求发出和服务器返回之间的时间差。该过程包括DNS解析、网络数据传输、服务器计算、网络数据返回。RT的大小与用户体验密切相关,影响用户请求的延迟。 **QPS(Query-per-second):** QPS是指在一定并发度下,服务器每秒可以处理多少请求,通常我们算的是在资源充分利用而不过度的前提下的合理QPS。 **性能曲线模型分析:** 性能曲线模型是性能变化的曲线拐点模型图,它可以帮助我们理解性能的主要变化趋势。 * **轻压力区:**响应时间变化不大,比较平缓。 * **重压力区:**响应时间先呈现增长的趋势,然后进入拐点区后响应时间急剧增大。 * **拐点区:**系统性能达到极大,但线程数继续递增,QPS不变,但RT会增大。 * **重压力区:**资源利用率再次增加,最后达到饱和状态,资源利用率见顶后横盘不再涨。 **QPS及RT相关总结:** * QPS大小和机器数量成反比。 * RT过大却能间接带来CPU的瓶颈。 * 在大多数情况下,如果别的资源瓶颈不够明显,在高并发下RT越大越容易出现线程堆积,到一定程度就会开始线程争抢CPU资源造成资源浪费,所以很多时候RT越高会越快间接导致CPU资源变成瓶颈。

正文

 

 

一、RT(Response-time、响应时间)

响应时间是用户请求发出和服务器返回之间的时间差。

这个过程包括DNS解析、网络数据传输、服务器计算、网络数据返回,如下图例子:

 

期中,服务器计算时间又可细分为:

1.     Web Server响应的时间;

2.     App Server响应的时间;

3.     CPU执行时间;

4.     线程等待时间(DB、存储、rpc调用等导致的IO等待,sleep,wait等等)。

 

RT的大小与用户体验密切相关

开发人员能够有效去优化的,是CPU执行时间,线程等待时间两大部分。

 

 

二、QPS(Query-per-second)

定义:QPS是指在一定并发度下,服务器每秒可以处理多少请求,通常我们要算的是在资源充分利用而不过度的前提下的合理QPS。

提高QPS能将服务器资源的充分利用, QPS提升1倍理论上服务器数能减少1半。

TPS类似,本文统一用QPS来贯穿讲解。

 

3.1 QPS计算

    QPS = 并发线程数量 * 1000/线程RT

 

      缩短线程RT,QPS未必会变!因为随着RT变化支持的并发线程数也可能会跟着变,这里涉及一个新的概念:最佳线程数量。

 

3.2 最佳线程数

    最佳线程数量:刚好消耗完服务器的瓶颈资源的临界线程数

     备注:瓶颈资源可以是CPU,可以是内存,可以是锁资源,也可以是IO资源

 

 

举例:在一个4cpu的服务器上,有这样一个线程:

•       预处理数据耗时  15ms

•       调用rpc等待耗时 80ms

•       解析结果耗时      5ms

 

 

  • 如果CPU计算为瓶颈资源,那么

      最佳线程数量 = ((RT) / RT中CPU执行时间) * CPU数量=( (15+80+5) / (15+5) ) * 4 cpu  =  20

 

  • 如果调用rpc的方法加了同步锁,且这个锁是瓶颈资源,那么

       由于同步锁是个串行资源,并行数是1,所以

       最佳线程数量 = (RT / RT中的lock时间) * 1 = ((15+80+5) /80) * 1个串行锁   =   1.25

 

  • 同理,以xx为瓶颈资源为例,计算最佳线程数量

       最佳线程数量=(RT/xx瓶颈资源时间) * xx瓶颈资源的线程并行数

 

 

总结:

最佳线程数量=(线程总时间/瓶颈资源时间)*瓶颈资源最佳线程数

QPS =  1000/RT中瓶颈资源时间  * 瓶颈资源最佳线程数

 

所以理论上如果缩短的是在瓶颈资源上消耗的RT是能提升QPS的,

缩短其他RT则不行,因为最佳线程数会跟着变,且理论上会变得恰好是“刚好消耗完服务器的瓶颈资源的临界线程数”,最终还是取决于瓶颈资源。

 

    

 

三、性能曲线模型分析

典型的性能趋势变化的曲线拐点模型图如下:

 

 

1)X轴从左往右分别是轻压力区、重压力区、拐点区。

 

2)响应时间:随着线程并发数增加,在轻压力区的响应时间变化不大,比较平缓,进入重压力区后响应时间先呈现增长的趋势,然后进入拐点区后响应时间急剧增大。

 

3)吞吐量:随着并发线程数的增加,吞吐量增加,进入重压力区后逐步平稳,到达拐点区后急剧下降,这个时候系统已经达到了处理极限,再继续压系统性能就会急剧下降甚至崩溃。

 

4)资源利用率:随着并线程数的增加,资源利用率逐步上升,最后达到饱和状态,资源利用率见顶后横盘不再涨。

 

5)综合分析:

  • 随着线程并发数的增加,吞吐量与资源利用率增加,在达到最佳线程数的时候,QPS达到比较理想的顶点。

  • 在QPS达到顶点后线程数继续递增,QPS一开始不变,但RT会增大:线程增多RT增大并不是说我们的代码执行效率下降了,而是资源的竞争,导致线程等待的时间上升了。

  • 但随着并发线程的持续增加,吞吐量与资源利用率都达到了饱和,随后资源争抢加剧开始导致资源浪费,所以吞吐量急剧下降,并且响应时间急剧增长。

  • 轻压力区与重压力区的交界点是系统的最佳线程数,因为各种资源都利用充分,且响应也很快;而重压力区与拐点区的交界点就是系统的最大线程数,若超过这个点,系统性能将会急剧下降甚至崩溃。

 

 

四、QPS及RT相关总结

  1. 支撑同样的业务量,QPS大小和机器数量成反比。

 

  1. 只有在瓶颈资源上进行优化才能提升QPS,瓶颈资源可以包括CPU、内存、锁、IO、外部依赖、甚至网卡等等

 

  1. QPS和RT是性能优化的两个不同的方向,二者并无绝对必然的联系,他们的优化也有不同的思路。

 

  1. 但在大多数情况下,如果别的资源瓶颈不够明显,在高并发下RT越大越容易出现线程堆积,到一定程度就会开始线程争抢CPU资源造成资源浪费,所以很多时候RT越高会越快间接导致CPU资源变成瓶颈。   

      所以,虽然RT不是资源更不是瓶颈,但RT过大却能间接带来CPU的瓶颈。



 

备注【CPU时间片】:

      程序的任何指令的执行往往都会要竞争CPU这个最宝贵的资源,不论你的程序分成了多少个线程去执行不同的任务,他们都必须排队等待获取这个串行资源来计算和处理命令。在Linux的内核处理过程中,每一个进程默认会有一个固定的时间片来执行命令(默认为1/100秒),这段时间内进程被分配到CPU,然后独占使用。如果使用完,同时未到时间片的规定时间,那么就主动放弃CPU的占用,如果到时间片尚未完成工作,那么CPU的使用权也会被收回,进程将会被中断挂起,等待下一个时间片。

</article>

与[转帖]性能关键指标及模型分析-QPS,RT相似的内容:

[转帖]性能关键指标及模型分析-QPS,RT

一、RT(Response-time、响应时间) 响应时间是用户请求发出和服务器返回之间的时间差。 这个过程包括DNS解析、网络数据传输、服务器计算、网络数据返回,如下图例子: 期中,服务器计算时间又可细分为: 1. Web Server响应的时间; 2. App Server响应的时间; 3. C

[转帖]性能测试:关键性能指标与性能分析

关键指标 应用性能指标 响应时间(Response Time): 指从客户端发送一个请求开始计时,到客户端接收到从服务器端返回的响应结果结束所经历的所有时间。响应时间组成:请求发送时间、网络传输时间和服务器处理时间三部分组成。响应时间越短越好,目前接受的时间是2/5/8秒。 吞吐量(Throughp

[转帖]网络转发性能测试方法 ( l3fwd, ovs-dpdk )

https://aijishu.com/a/1060000000212215 1 简介 本文记录l3fwd和ovs-dpdk性能测试中用到的关键脚本。 2 测试拓扑 l3fwd测试拓扑 ovs-dpdk测试拓扑 3 测试步骤 设置大页内存 #set hugepage umount /dev/huge

[转帖]基本系统调用性能lmbench测试方法和下载

简介 Lmbench是一套简易,可移植的,符合ANSI/C标准为UNIX/POSIX而制定的微型测评工具。一般来说,它衡量两个关键特征:反应时间和带宽。 Lmbench旨在使系统开发者深入了解关键操作的基础成本。 本文以银河麒麟/Ubuntu为例。 文末获取【lmbench】工具下载地址 测试方法

[转帖]云数据库是杀猪盘么,去掉中间商赚差价,aws数据库性能提升 10 倍!价格便宜十倍。

https://tidb.net/blog/021059f1 于是乎dba中的冯大嘴喊出了云数据库就是杀猪盘。让每个公司自建数据库。 那么有没有一种数据库又便宜又好用呢。有 哪就是tidb数据库。 之前一个dba工程师的工作内容可能包括以下几个方面: 监控带宽、流量、并发、业务接口等关键资源及访问信

[转帖]Redis线程模型的前世今生

https://www.jianshu.com/p/ea83267db47a 一、概述 众所周知,Redis是一个高性能的数据存储框架,在高并发的系统设计中,Redis也是一个比较关键的组件,是我们提升系统性能的一大利器。深入去理解Redis高性能的原理显得越发重要,当然Redis的高性能设计是一个

[转帖]Day742.Redis阻塞主线程的问题 -Redis 核心技术与实战

Redis阻塞主线程的问题 Hi,我是阿昌,今天学习记录的内容是Redis阻塞主线程的问题。 Redis 之所以被广泛应用,很重要的一个原因就是它支持高性能访问。 也正因为这样,我们必须要重视所有可能影响 Redis 性能的因素(例如命令操作、系统配置、关键机制、硬件配置等),不仅要知道具体的机制,

[转帖]性能案例-Linux下解决time_wait连接过多(Linux内核优化)

一、性能测试的主要概念和计算公式 系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。 单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。 系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

[转帖]使用Flame Graph进行系统性能分析

http://t.zoukankan.com/arnoldlu-p-10148558.html 关键词:Flame Graph、perf、perl。 FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图。 从底向上像火苗一样逐渐变小,也反映了相互之间的包

[转帖]MySQL索引优化分析之性能分析(Explain执行计划)

一、MySQL常见瓶颈 二、性能分析工具Explain(执行计划 ) 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。查看官网说明: 使用: Explain + SQL语句 作用: 三、各字段解释 3.1、