首页 > 编程知识 正文

jmeter吞吐量和并发数关系,jmeter性能测试实战

时间:2023-05-06 04:07:28 阅读:169199 作者:2891

如果继续讨论餐厅服务能力的调整,这可能会成为餐饮博文。

不过,铮铮相信,在第一部分我们的讨论中,会发现有很多与服务器性能相似的概念。

正好,高大的大神

不仅开了开封料理餐厅,还经营着网站=_=!

该网站的典型事务请求链接如下。

请不要说。 和吃饭的流程很相似呢。

而且,就像多人吃饭的场景一样,这个网站也有多个用户要求:

当从客户端发起请求时,沿着上述线路传输并线性地完成。

精挑细选的大神发现,这个网站性能的关键在于APP应用服务器。 就像餐厅的服务能力,主要依赖于主厨的团队一样。

如果多个客户端同时发起请求,则服务器必须具有一定的“并行”功能。 否则,后续请求可能会排队并超时。

说起来,上图是我们画的

但是,一般来说,服务器的

有多处理器辅助超线程技术。

主流的编程语言有“多线程编程”的概念,其目的是合理地调度任务,充分利用CPU的所有处理器。

也就是说,这个APP被认为是服务本身有多位厨师在做饭。

根据处理器数量和多线程技术,可以线程化一些事务

像那样并行处理。

不过,精挑细选的大神对目前的服务器性能并不满意,与餐厅一样,精挑细选的大神也针对这种APP服务考虑了更多的调整方案。

厨师的数量真的够吗? 是否要继续增加人数(CPU核心数、服务器节点数-硬件调整)?

主厨的经验和技术足够吗? 是否雇用更资深的厨师(改变具有更高频率CPU的服务器)的硬件调整; 提高业务逻辑效率-逻辑调整?

改良受欢迎的饮食准备策略吗? (利用数据库索引、高速缓存等技术-逻辑调优)

我们强调的调谐重点、APP服务/厨师团队以外的部分也可能成为瓶颈,需要调谐解决。 例如:

餐厅的容量不能容纳排队的客人吗? (服务器容量、线程池大小、最大连接数、内存容量)

jjddp的点餐和烹饪速度是掣肘吗? (网络带宽、路由效率等。 在数据密集型服务器中,网络带宽很可能成为瓶颈。 )

等等

3 .接下来是性能测试环节

下面介绍了如何测试一组服务的性能。

线程数:

实现性能测试的必要条件之一是能够模拟高峰访问量。 这在普通的APP应用程序客户端中很难做到(例如,web APP客户端是浏览器)。 很难使用浏览器同时向服务器发送大量请求。)。

这里需要性能测试工具。 主要的性能测试工具例如

等同时通过在线程序运行,完成“在短时间内向服务器发送大量请求”的任务。

多线程并发测试工具xbdsc启动多个线程,每个线程独立地向服务器发出请求。

在描述性能测试过程时,此客户端的独立线程数可能表示为“并发计数”。

但是,这里的“并发”是指客户端的并发,很简单。 客户端可以提出很多请求,但服务器不一定能处理。

并行行数:

那么,服务器一次同时处理多少事务请求?

根据以前的讨论,在同一时间节点上同时处理的最大事务数是CPU处理器数量*服务器的超线程倍率。

例如,对于8核的非超线程CPU,在给定的时间节点上同时处理的事务量不会超过8个。 和8个厨师一样,同一时间点只能处理8顿饭。

超线程技术就像对厨师们进行了“左右为难”的训练,让每个人都能专心致志地处理两顿饭。

这里描述的“同时8个”事务是“并行/平行”的意思。

并发行数:

请注意,上面讨论的“并行数”不是“同时数”。 否则,直接查看CPU内核数量就可以确定并发次数。

同时数是指一定期间内的情况

的事务完成计数。 该切片“时间段”多取1秒或1分钟这样的整数进行换算。

假设一个厨师平均2分钟做完一个菜,那么8个厨师2分钟做完8个菜,换算下来就是4个/分钟。

如果以分钟为单位进行统计,这个数字就是最终的结果。

每秒的事务数(TPS ) :

典型的APP应用服务器的处理速度与主厨的烹饪不同,典型的事务请求在APP应用服务器上的处理时间是以毫秒为单位计算的。

因此,在测试性能时,经常使用“1秒”作为切片时间段。

关于每秒完成多少事务请求的数据是我们熟悉的“每秒事务数”。

将此指标翻译成英语为TPS - Transaction Per Seconds。 (有时也会用QPS - Query Per Seconds进行统计,但暂时不讨论其差异。)

每秒的事务数是衡量服务器性能的最重要和直观的指标。

每秒能完成的事务数越多,那么每分钟能完成的事务就越多,每天完成的事务数就越多 --

简单的小学数学。

那么他直接能影响到一个应用服务每天平均能承受的访问量/请求量,以及业务高峰期能承受的压力。

平均响应时间:

那么有哪些因素会影响到TPS数值?

有两个主要的维度:

单个事务响应速度

同一时间能并行执行的事务

第二点我们说了,它主要跟服务器资源配置,线程池容量,线程调度等相关。

第一点换一个说法就是:事务平均响应时间。单个事务平均下来完成的速度越快,那么单位时间内能完成的事务数就越多,TPS就越高 --

简单的小学数学。

所以在进行性能调优时,除了服务器容量资源,单个事务响应速度是另一个关注的重点。

要关注事务响应速度/时间,可以考虑在事务内部逻辑节点添加“耗时探针”的方式,来探测每个步骤分别花费的时间,从而找出可优化的部分。

吞吐量

吞吐量

是在性能探测过程中经常冒出来的名词,怎么理解他呢?

简单的结论就是,吞吐量是站在“量”的角度去度量,是一个参考指标。

但是光有“量”的数据有时候并无太大价值,一家餐厅1个小时卖出100份餐品和一个月才卖出100份餐品,单从“量”的维度衡量肯定不行,时间维度很重要!

所以,性能测试领域的吞吐量通常会结合上时间维度进行统计。

如果吞吐量的“量”以“事务”为统计单位的话,结合时间维度,转化以后可以很容换算成TPS。

4. 最后,关于性能测试的一些碎碎念

测试类型

由于测试目标的不同,性能测试可能存在很多种形式。

比如明确了解日访问量和巅峰访问量,测试服务器是否能够承受响应压力的测试。

比如用于探测系统负载极限和性能拐点的测试。

比如衡量系统在高负载情况下,长时间运行是否稳定的测试。

这许多种形式我们暂且不做讨论,不过所有以上测试的基础都是它 -- “并发测试”。

制造并发,是性能测试的基本实现办法。

进一步细化理解客户端线程数和并发量的关系

设服务器并发能力为每秒完成1个事务,即TPS=1/s。且服务器使用单核处理器,现用Jmeter启动5个线程循环进行并发测试,那么每个切片时间(每秒)都发生了什么?

我们可以用如下图表来分析:

其中,

为线程可执行(等待执行),

为线程正在执行,

表示线程执行完毕。

假设其他条件不变,增加服务器并行处理数为2(增加CPU核数为2,以及合理的线程调度机制)那么变为:

这里真实的并发数(服务器单位时间完成的事务数)就是图中每一秒钟完成的事务数。

而客户端启动的其他未处理的线程则在“排队等待”。

线程并发数量

那么制造多少并发,换言之,我应该用多少并发线程数去进行测试?

实际上客户端发起的线程数与服务器可达到的并发数并无直接关系,但你应该使用足够的线程数,让服务器达到事务饱和。

如何判断服务器是否达到饱和?这时我们可以采取阶梯增压

的方式,不断加大客户端线程数量,直到服务器处理不过来,事务频繁超时,这时就得到了服务器处理能力极限。

根据不同的测试类型,取这个极限数量的一定百分比作为客户端线程数。

比如说,负载测试中,通常取达到这个极限数值的70%。

客户端损耗

我们在讨论餐厅订单流程和服务器事务流程时,流程图里包括了顾客/客户端。

顾客点餐要不要花时间?当然要,如果他患上选择困难症,甚至有可能在下单的时候花去大量时间。

同理,客户端从启动线程到构造请求并发出,这一过程也有一定的时间损耗。

通常在测试服务器性能的时候,客户端性能是应该被剥离出去的,所以测试时应该尽量降低客户端时间损耗。

适当增加客户端线程循环次数 - 稀释这些线程启动的占用时间

当客户端线程数需要较大数量时(对jmeter而言,超过1000左右),客户机/测试机的资源占用会增大,整个客户端的请求构造时间会拉长。应该考虑分布式测试。

尽量减少客户端请求构造时间,比如beanshell请求加密,如果过程过于复杂也会耗去可观时间。极限测试情况下应考虑简化。

那么本文到这里告一段落。

希望能帮助理解性能测试领域的这些关键概念和原理

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。