整理了下Jmeter的Throughput和平均RT的计算,如下公式:
TPS=(sample样本数)/(最后一个线程启动的时间+最后一个线程持续的时间-第一个线程启动的时间)
RT=所有sample样本响应时间和/样本个数
1.TPS:每秒处理的事务数,jmeter的Throughput为吞吐率(请求数/秒),在加了事务控制器后,TPS=Throughput
宏观上:TPS=并发数/响应时间,jmeter的Throughput = (number of requests) / (total time) ,即
Throughput =(sample样本数)/(最后一个线程启动的时间+最后一个线程持续的时间-第一个线程启动的时间)
可以这样理解这个公式:绝对的并发是不存在的,请求发出的时间总有先后,绝对的TPS也是无法计算的,统计的角度看,服务器处理请求总数/花费的时间即是TPS,这也是
为什么需要不断增大用户数来寻找服务器的最大TPS的原因
2.平均响应时间=所有sample样本响应时间和/样本个数
误区:
TPS=请求数/RT (RT是所有事物的平均时间)
此TPS的计算公式是错误的
数学公式法:
TPS= (number of requests) / (total time) --------公式1 TPS的定义公式
TPS=1/RT * 请求数 = 样本个数2/所有sample样本响应时间和 -----------公式2 带入公式 平均响应时间=所有sample样本响应时间和/样本个数
假设公式2等于公式1 ,则
(number of requests) / (total time) = 样本个数2/所有sample样本响应时间和
即:
1/ (total time) = 样本个数 / 所有sample样本响应时间和
显然等式两边不成立,假设不成立
另:number of requests 是等于 样本个数 等于 请求数
场景分析法:
场景1,A应用是单线程处理,处理一个请求需要1s,5个VU去请求一次,第一个请求花费了1s,第二个花了2s...第五个花了5s,总时间是(5+4+3+2+1)=15 s,总请求数是5,所以A系统的TPS = 5/15 = 1/3,平均响应时间是(5+4+3+2+1)/5=3s,此时若按照TPS=1/RT*请求数 计算,则TPS=1/3 * 5 = 5/3 , 显然是不对的
场景2,当去请求多个事物时,此时这个公式是明显错误的
参考:
http://www.i3geek.com/archives/1165
http://jmeter.apache.org/usermanual/glossary.html#Throughput
http://yhz61010.iteye.com/blog/1735874
http://www.cnblogs.com/ceshixuexi/p/7116683.html