第七周课后练习
性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?
随着并发量的增加,吞吐量呈现出一个抛物线的状态;横轴是并发数,纵轴是吞吐量数。
![](https://static001.geekbang.org/infoq/05/05a85fa2287817f05eface0d17f201ab.png)
一开始的时候,随着并发数的增加,吞吐量近似于线性增加,到达某个点【假设这个点叫做B点】;当曲线通过B点后,随着并发量继续增加,吞吐量的增加开始变缓了,到达某个点【假设叫C点】,当曲线到达C点时,吞吐量到达最大值;进步与增加并发数时,曲线通过C点时,吞吐量会下降。
这种现象的原因是主要还是资源的消耗。
一开始没有并发请求的时候,服务器资源都是空闲的,那么吞吐量当然也是0了,当我们有10个并发5个并发的时候,系统根据这些请求会创建出相应的线程来处理,每个线程都能够抢到cpu去处理一个请求,并都能够有足够的内存空间来使用,同时磁盘、网络的资源都是够用的,则在B点之前,响应时间非常快,从而反映出系统的处理能力比较快,单位时间内处理的请求也就越多,吞吐量也就越高。
随着并发数的增加,过了B点后,系统的资源也就不够了,比如48 core的cpu,根据并发数,需要200个线程来处理,这些线程不可能都同时抢占cpu,则会出现一些线程等待cpu调度,等待的线程其处理任务的响应时间就会变长,则单位时间处理的任务数就会变慢,从而导致吞吐量变慢,但是吞吐量还是在增加;到达C点后,系统的处理能力达到极限了。
过了C点后,随着并发数的增加,吞吐量会下降,比如内存,当系统处理200个并发后,就把系统的内存耗尽了,这个时候并发数还在增加,新的请求进来后,应该会继续创建线程处理,这些线程还要内存,这个时候内存已经没有,系统使用硬盘来虚拟内存,CPU基本没啥操作,时间几乎都花在虚拟内存的置换上面,从而响应时间变长,处理能力越来越差,到了最后一对处理线程都在等待系统资源,到最后系统什么也处理不了,资源耗尽了,所有的请求得不到响应,系统走向崩溃。
分布是系统的目的就是提高系统的资源。
评论