05丨指标关系:你知道并发用户数应该怎么算吗?
05丨指标关系:你知道并发用户数应该怎么算吗?
讲述:高楼
时长21:30大小14.78M
什么是并发
在线用户数、并发用户数怎么计算
示例
总结
思考题
赞 38
提建议
精选留言(144)
- zuozewei2019-12-25第一个问题:如何理解“服务端的并发能力”这一描述? 首先我们从数据视角来理解,可以把服务端程序用一个模型来看待,即由「网络 API 请求」所驱动的。 服务端的领域特征是大规模的用户请求,以及 24 小时不间断的服务。但某种意义上来说更重要的原则是:坚决不能丢失用户的数据,即他认为已经完成的业务状态。服务端必须保证其业务状态的可靠性,这时业务状态才持久化写入到外存。所以对于服务端来说,存储至关重要。它不只是极大地解放了处理效率,也是服务端的性能瓶颈所在。几乎所有服务端程序扛不住压力,往往都是因为存储没有扛住压力。 在衡量服务端的性能,我们还是要服务端视角来看,主要以 TPS 为主来衡量系统的吞吐量,如果有必要用并发用户数来衡量的话,需要一个前提,即响应时间(RT),因为在系统压力不高的情况下,将思考时间(等待时间)加到场景链路中,并发用户数基本还可以增加一倍,因此用并发用户数来衡量系统的性能没太大的意义,也不专业。 第二个问题:我为什么不提倡使用“绝对并发”和“相对并发”的概念呢? 我觉得一切的前提是业务价值需要。如果没有足够的价值,那么可读性才是第一,对这种难懂的概念很反感,要知道的其会加重内部沟通的难度,得不偿失。如果没那个价值,简单才是王道。 第三个问题:我们为什么不推荐用 CPU 来计算并发数? 比如单核CPU情况,实际上是只有一个的,在一个特定时刻也只可能有一个程序跑在一个CPU上(因为寄存器只有一组),但是我们在上层观察到的却是系统上好像同时运行着那么多的程序,这实际上是操作系统用进程这个概念对CPU做的抽象。 同时如果你了解「阿姆达尔定律」,就知道多处理器并行加速,总体程序受限于程序所需的串行时间百分比,超过一定的并行度后,就很难进行进一步的速度提升了。并不符合线性关系,也无法估算的。 再说服务端程序性能依赖不仅仅是底层的硬件,其依赖的基础软件还包括:操作系统、编程语言、负载均衡、中间件、数据库或其他形式的存储等。在第一个问题中提到了几乎所有服务端程序扛不住压力,往往都是因为存储没有扛住压力。 最后,还是需要回到第一个问题,即由「网络 API 请求」所驱动的模型上来。展开
作者回复: 不仅深得真传,还扩展了。 我看好你哦。
共 11 条评论60 - 葛葛2020-01-17对于并发度还不太理解。请问有历史线上数据的情况如何计算并发度,没有的情况又如何估算呢?能否分别举例说明一下。
作者回复: 我觉得这个会是比较简单直接的过程,所以就没有细写。逻辑如下: 1. 统计某时段的当前在线用户数; 2. 统计同一时段的操作某个功能的用户数; 3. 把所有功能操作的用户数都统计出来; 4. 将统计出来的用户数除以在线用户数就知道并发度了。
共 5 条评论23 - 律飛2019-12-25问题一,如何理解“服务端的并发能力”这一描述。对于web项目而言,服务端是整个项目的关键,是咽喉要道,因此也是性能测试的重点。测试目的当然是要摸清这个要道能同时走多少人(注意这里的人不是在线用户数并发用户数,而是服务器能处理的事务),因此TPS最能描述服务端的并发能力。虽然老师一直强调压力机并发线程数不是关键,但是公式表明其与TPS、响应时间有着不可分割的联系,还需要好好体会并运用。很期待基准测试以及如何判断响应时间、TPS合理的后续讲解。 问题二,为什么不提倡使用“绝对并发”和“相对并发”的概念呢?老师讲得很清楚了,这两个概念对于我们关心的性能并没有太多的帮助,反而让人有点无从使用。在线人数,并发数,并发度简洁明了,很好理解,有利于沟通,是性能测试必备指标之一。 问题三,为什么不推荐用 CPU 来计算并发数?并发数是业务逻辑层面的,而CPU只是众多软硬件环节中的一环,即使可以借鉴,肯定也是很粗略的估计,在实践中使用价值不大,没有推广使用的必要。展开
作者回复: 这个理解太正确了。比我写的好。
共 3 条评论22 - 月亮和六便士2019-12-25老师,我们一般根据日志可以拿到在线用户数,但是并发度是百分之一还是百分之十这是全靠拍脑袋算的吗?
作者回复: 通过统计每秒的业务请求数以及比例就可以知道并发度了呀。 可不能把脑袋拍坏了。
共 10 条评论7 - hou2020-02-29‘’这时对 Server 来说,它处理的就是 100TPS,平均响应时间是 50ms。50ms 就是根据 1000ms/20TPS 得来的(请注意,这里说的平均响应时间会在一个区间内浮动,但只要 TPS 不变,这个平均响应时间就不会变)。‘’ 这里不太明白一点,tps是每秒完成的事物数,还是每秒在处理的事物数,还是每秒请求的事物数? 如果按照引用文中所示,1000/20=50的响应时间,我理解为20tps为每秒完成的事物数。 在前一章例子中,在线10000人,并发度5%,算出的500个tps,又让我感觉tps是指每秒的事物并发请求数。 在我的理解中,请求数和完成请求数是不同的展开
作者回复: TPS是完成的事务数。 你说的20tps是一个线程的。 你后面的这句话,里面有好几个概念,我们简化一下:500tps就是并发数。这样是不是简单些? 我这里写到的都是有请求有响应的才叫一个T,只请求不响应,那是半个T。
6 - 凯2020-05-20老师,看一下以下的推导是不是正确 对公式TPS计算公式总结: TPS就是单位时间处理事务的数量, server TPS = △事务数 / △t = 线程数 * 单个线程的事务数 / △t JMeter上给的时间是单个事务的平均时间展开
作者回复: 对的。
5 - JK2020-03-09高老师您好,仍有些疑问冒昧咨询。 某项目进行接口压测,提出需满足并发800且响应时间<5秒,当时的场景设置就直接发起800线程进行负载,结果出现大量超时异常。 学习本节后,将TPS概念投射进来。假如使用TPS理解衡量并发能力的话,原文中的并发800是否等价于800TPS吗? 参照文中例子,指服务器的TPS是100,线程TPS是20,因此推算出压测只需要发起5个线程进行负载即可。 切换到开头的例子,是否可理解服务器的期望TPS是800,而单个线程TPS是0.5(接口调用的rt是2000ms),按此验算的话压测需要发起1600线程负载才能达到原定TPS(0.5*1600=800?)。而1600个线程是否等价于N个线程*循环M次呢?展开
作者回复: 理解的有问题哦。 “学习本节后,将TPS概念投射进来。假如使用TPS理解衡量并发能力的话,原文中的并发800是否等价于800TPS吗?” 答:显然不是的,你如果用压力线程800的话,就得看响应时间是多少、TPS是多少,这个压力线程数显然不是TPS。 ”参照文中例子,指服务器的TPS是100,线程TPS是20,因此推算出压测只需要发起5个线程进行负载即可“ 答:这个理解的对。 ”切换到开头的例子,是否可理解服务器的期望TPS是800,而单个线程TPS是0.5(接口调用的rt是2000ms),按此验算的话压测需要发起1600线程负载才能达到原定TPS(0.5*1600=800?)。而1600个线程是否等价于N个线程*循环M次呢“ 答:如果接口调用的响应时间是2s,那显然一个线程的TPS就是0.5。假设响应时间不会随着线程的增加而增加,那你就需要1600个线程才能达到800tps的要求。而这1600个压力线程,显然不能等价于N个线程*循环M次,而是1600个压力线程才对。
共 8 条评论5 - 顺利2020-01-21服务端线程的工作情况图在哪里看呢老师?linux服务器上还是jmeter有监控插件
作者回复: java的可以用jvisuamvm之类的工具看。
共 2 条评论5 - 柚子2020-04-14老师,我有个问题想问下,如果只知道在线用户数,不知道并发度和相应时间,怎么计算并发用户呢?
作者回复: 没法计算,只能蒙了。
4 - 秋刀鱼滋味2020-03-09就是说算好并发度就不需要设置思考时间之类的了吗
作者回复: 不需要。
共 4 条评论4 - 木头人2020-01-13老师好,请问并发度是怎么算的呢? 您给的回复“通过统计每秒的业务请求数以及比例就可以知道并发度了” 请问这个可以举例吗?这个比例是什么呢?还是不太明白
作者回复: 这个如果要详细说下来有点复杂。等我把这个专栏全部完成了。我考虑下做个实例出来描述具体的过程吧。 如果只是空口白牙的解释,我觉得怎么解释都显得空洞。 等我。
共 5 条评论4 - 呆熊2020-03-11算压力机线程数,看平均每秒tps还是就1个线程跑一次
作者回复: 这种方式可以大体看一下,请注意在压力过程中,单线程的TPS会随着压力的增加而降低。
3 - 夏文兵2020-01-06针对吞吐量,根据你的公式, 我没计算出跟jmeter一样的值。我用jmeter 去压测(http://example.com/),number of threads: 3, Ramp-Up:1, Loop Count:50, 平均响应时间:679ms, Throughput: 3.6/sec, 但是根据您的计算公式 1000/679 * 3 = 4.4。请高老师赐教。
作者回复: 去掉ramp up。
共 2 条评论3 - zxs2020-01-05老师你好,问个问题: 以前测试,项目上要求测出最佳并发用户数,我这边测出一个最大Tps,这个Tps对应的jmeter设置线程数就是最佳并发用户数。现在看了这篇文档,我现在可以认为Tps就是并发用户数吗?
作者回复: 不可以。 再看一遍。
共 3 条评论2 - 静水潜流,润物无声2022-05-28老师您好!summary + 有一个TPS1;summary = 也有一个TPS2;前面TPS1是某时间段内的均值TPS;TPS2是从开始到截止当前的累计平均TPS;将TPS1按时间戳顺寻拟TPS曲线,与按TPS2依时间拟TPS曲线;如果是阶梯压力测试,前者的TPS曲线会陡,后者的TPS会平缓;获取最大TPS,应该是以TPS1的曲线最大值为准吧;jmeter平常拟定的TPS曲线应该是TPS1的曲线?请问summary + 30 秒这个是在哪里设置的?GUI版本是通过TPS曲线颗粒设置吗?两者是一回事吗?展开
作者回复: 1. 是以TPS1曲线最大值为准。 2. jmeter平常拟定的TPS曲线应该是TPS1的曲线,这个我不知道你说的是在哪里看到的。 3. summary + 30 在属性文件中配置。 4. GUI版本是通过TPS曲线颗粒设置,如果是自带的控件,是一致的。
1 - 章鱼2022-03-18评论区的大神们,真的太牛了,我每一篇文章下面的问题都要看一个小时,才能看完
作者回复: 评论区才是出人才的地方。
1 - Ahern2021-11-24老师,根据公式TPS=1000ms/响应时间(单位ms)∗压力机线程 但是前面又提到: 如果每个线程的 20TPS,显然只需要 5 个线程就够了(请注意,这里说的线程指的是压力机的线程数)。这时对 Server 来说,它处理的就是 100TPS,平均响应时间是 50ms。50ms 就是根据 1000ms/20TPS 得来的 按照公式的话,为什么这里的平均响应时间计算1000ms/20TPS 不用乘以线程数展开
作者回复: 这三个方你来回倒腾呀? 1000ms/20TPS不就直接得到线程数了吗?为啥还乘以线程数?
1 - SHATAN CLASS2021-08-04用jmeter对单个接口跑10个线程,Ramp-up time = 1s , 聚合报告结果为:Average=87,Throughput=10/s 按照这张的知识计算 : 并发用户数(TPS)=1000 / 87 * 10 = 115TPS 如果并发度为5%,在线用户数就是115 / 5% = 2299 老师,我有两个疑问: 1、这里的计算和Ramp-up time 有关系吗? 2、jmeter聚合报告里的Throughput 和 上面计算的 并发用户数(TPS) 怎么去区别和理解呢? 如果Ramp-up time = 2s,则 Average=58,Throughput=5/s , 并发用户数(TPS)还是= 1000 / 58 * 10 = 172TPS 吗?展开
作者回复: 这种算法有问题。这个公式只对瞬间数据有效,对统计之后平均的数据无效。
共 4 条评论1 - ^_^2021-04-25在【什么是并发】那个段落中,“如果是这样的话,绝对并发还用算吗?那肯定是 CPU 的个数呀”。请问这里的cpu的个数怎么理解,比如8核的cpu,难道个数是8吗?如果是这样理解,后面那句话“要说绝对的某个时刻,任务数肯定不会大于 CPU 物理个数。” 又怎么理解呢
作者回复: 这是一个意思呀。对于从时刻的角度来看并发的话,那必然不会高过CPU的物理个数呀。如果是多线程的8核,就得看有几个物理核了呀。
共 2 条评论1 - 孙星星2021-03-09高老师你好,实际测试中遇到一个问题,想请教您。 jmeter的Throughput Shaping Timer这个元件中的RPS设置,是代表客户端每秒实际发送的请求数,还是每秒期望达到的请求数? 接口测试场景: 1. 200并发,RPS分别设置为6000,8000和10000 2. 增加并发数,RPS设置为6000 测试结果: 1. 200并发,RPS分别设置为6000,8000和10000,三种情况下最终统计的响应时间、QPS(5000+)、samples都一样,且无错误率。 2. 增加并发数量,最终统计的QPS也只达到5000+,且响应时间很明显增加,可以确定不是因为并发数不够才造成QPS达不到6000 问题: 1. 上述测试是否可以说明服务器最大QPS是5000+? 2. 假定问题1成立(最大QPS确实只能达到5000+) 如果RPS代表每秒实际发送的请求数,RPS分别设置为6000,8000和10000的时候,响应时间和samples应该会逐渐变大,测试结果1就解释不通了。 如果RPS代表每秒期望达到的请求数,为什么一直达不到期望值呢?jmeter是怎么去发送请求的?是等到第一次并发后,服务器给客户端响应了请求之后再发送另一波请求?还是不理会服务是否给响应,自顾发送请求(这种情况应该能达到期望值)? 我个人偏向于RPS代表每秒期望达到的请求数,且jmeter是在服务器给客户端响应了请求之后才会再发送另一波请求,所以会造成:即使RPS设置很高,但服务器每秒只能处理5000+,没有给客户端响应,所以客户端不会继续发送请求,最终不管RPS设置多少,并发一样的情况下,sample是一样的。但这只是我个人猜测的解释,查询资料也没有找到官方解释,期望高老师给予解答,感谢!展开
作者回复: 是期望达到的。
1