【性能面试题】车辆监控系统,监控5000车辆,5000车辆每秒上传其位置到监控系统(1秒监控一次);请问:性能目标是多少?需要多少线程?多少并发?
这是小红圈里看到一个群友的提问,一看此题,大部分测试朋友可能的想法是: 1、5000车辆,那就是5000用户,即5000并发,需要5000个线程; 2、服务端1秒监控一次,也就是tps需要至少5000+。
5000+tps应该大家都能理解,但是上面5000并发和5000线程是不对的,且不是同一个概念。
我们压测的目的是看服务器的处理能力能否达到我们的期望,所以,我们应该重点关注服务器,客户端的并发大小是无意义的,且可以通过思考时间增加并发线程数,只是说,客户端线程数会影响服务器tps趋势(比较服务器处理能力是有限的),而服务器的并发才是有意义的并发(当然,这里说的是相对并发,不是绝对并发),所以,并发=tps
至于需要多少线线程,这个是不确定的,如果服务器处理足够快,比如每个请求只需要0.01s,1个线程1秒就可以发送100个请求(需要用到参数化),tps是5000,那么1秒总共5000个请求,5000/100=50线程,相比部分人说的5000线程,真的少太多了,如果启动5000线程,也是非常耗费资源的,也正是如此,测试时jmeter频繁报oom;
那么,另外一个问题来了,初始线程该多少呢?因为最开始不知道服务器的处理能力,不知道处理一个请求需要多少时间,所以,只能试,比如线程组中线程我设置为1000,阶梯加压,每个阶梯50线程,且持续运行2-5分钟,如果第一个阶梯的tps都能达到5000,且服务器资源利用率在预期范围内,那很好,说明达到了压测目标。
但是,此时还不完美,务必再压测出一个峰值tps哦。压测不仅要测目标,还要测峰值。